<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>cd2mp3.sh</title>
<meta name="Generator" content="Vim/8.2">
<meta name="plugin-version" content="vim8.1_v2">
<meta name="syntax" content="bash">
<meta name="settings" content="use_css,pre_wrap,no_foldcolumn,expand_tabs,prevent_copy=,use_input_for_pc=fallback">
<meta name="colorscheme" content="default">
<style>
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #ffffff; background-color: #000000; }
body { font-family: monospace; color: #ffffff; background-color: #000000; }
* { font-size: 1em; }
.PreProc { color: #ff40ff; }
.Comment { color: #8080ff; }
.Constant { color: #ff6060; }
.Special { color: #ff40ff; }
.Identifier { color: #00ffff; }
.Statement { color: #ffff00; }
-->
</style>
</head>
<body>
<pre id='vimCodeElement'>
<span class="Comment">#!/bin/bash</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment">## \file cd2mp3.sh</span>
<span class="Comment">## \author Sebastien Beaugrand</span>
<span class="Comment">## \sa <a href="http://beaugrand.chez.com/">http://beaugrand.chez.com/</a></span>
<span class="Comment">## \copyright CeCILL 2.1 Free Software license</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">dev</span>=<span class="Statement">&quot;</span><span class="Constant">cdrom</span><span class="Statement">&quot;</span>
<span class="Identifier">bitrate</span>=<span class="Constant">192</span>
<span class="Identifier">m3u</span>=<span class="Statement">&quot;</span><span class="Constant">00.m3u</span><span class="Statement">&quot;</span>
<span class="Identifier">cddb</span>=<span class="Statement">&quot;</span><span class="Constant">audio.cddb</span><span class="Statement">&quot;</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># icedax + cddb</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">icedax ? (O/n) </span><span class="Statement">&quot;</span>
<span class="Statement">read</span> ret
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> n <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    icedax <span class="Statement">-D</span>/dev/<span class="PreProc">$dev</span> <span class="Statement">-x</span> <span class="Statement">-B</span> <span class="Special">-d</span>99999 <span class="Special">-Owav</span> <span class="Constant">2</span><span class="Statement">&gt;</span><span class="Statement">&amp;</span><span class="Constant">1</span> <span class="Statement">|</span> tee discid.txt
<span class="Statement">fi</span>

<span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> DTITLE </span><span class="PreProc">$cddb</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-z</span> <span class="Statement">&quot;</span><span class="PreProc">$title</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Identifier">discid</span>=<span class="Special">`cat discid.txt </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">&quot;</span><span class="Constant">CDINDEX discid</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant"> </span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special">3`</span>
    <span class="Statement">echo</span>
    <span class="Statement">echo</span><span class="Constant"> firefox <a href="https://musicbrainz.org/cdtoc/">https://musicbrainz.org/cdtoc/</a></span><span class="PreProc">$discid</span>
    <span class="Statement">echo</span>
    <span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>

<span class="Statement">if </span><span class="Statement">false</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Identifier">discid</span>=<span class="Special">`cat discid.txt </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">&quot;</span><span class="Constant">CDDB discid</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-dx</span><span class="Special"> </span><span class="Special">-f</span><span class="Special">2`</span>
    <span class="Identifier">genres</span>=<span class="Statement">&quot;</span><span class="Constant">rock misc folk classical country blues\</span>
<span class="Constant">            jazz newage reggae soundtrack data</span><span class="Statement">&quot;</span>
    <span class="Identifier">n</span>=<span class="Constant">1</span>
    <span class="Statement">for</span> i <span class="Statement">in</span> <span class="PreProc">$genres</span><span class="Statement">;</span> <span class="Statement">do</span>
        wget <span class="Statement">-O</span> cddb.tmp <a href="http://www.freedb.org/freedb/">http://www.freedb.org/freedb/</a><span class="PreProc">$i</span>/<span class="PreProc">$discid</span> <span class="Constant">2</span><span class="Statement">&gt;</span> /dev/null
        <span class="Statement">if </span><span class="Special">((</span>n <span class="Statement">&lt;</span> <span class="Constant">10</span><span class="Special">))</span><span class="Statement">;</span> <span class="Statement">then</span>
            <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&quot;</span>
        <span class="Statement">fi</span>
        <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$n</span><span class="Constant"> : </span><span class="Statement">&quot;</span><span class="Special">`</span><span class="Statement">grep</span><span class="Special"> DTITLE cddb.tmp </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
        <span class="Statement">(</span><span class="PreProc">(</span>n <span class="Statement">=</span> n + <span class="Constant">1</span><span class="PreProc">)</span><span class="Statement">)</span>
    <span class="Statement">done</span>
    <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">? </span><span class="Statement">&quot;</span>
    <span class="Statement">read</span> ret
    <span class="Identifier">n</span>=<span class="Constant">1</span>
    <span class="Statement">for</span> i <span class="Statement">in</span> <span class="PreProc">$genres</span><span class="Statement">;</span> <span class="Statement">do</span>
        <span class="Statement">if </span><span class="Statement">[</span> <span class="PreProc">$n</span> <span class="Statement">=</span> <span class="PreProc">$ret</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
            wget <span class="Statement">-O</span> <span class="PreProc">$cddb</span> <a href="http://www.freedb.org/freedb/">http://www.freedb.org/freedb/</a><span class="PreProc">$i</span>/<span class="PreProc">$discid</span>
        <span class="Statement">fi</span>
        <span class="Statement">(</span><span class="PreProc">(</span>n <span class="Statement">=</span> n + <span class="Constant">1</span><span class="PreProc">)</span><span class="Statement">)</span>
    <span class="Statement">done</span>
<span class="Statement">fi</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># encode</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> DTITLE </span><span class="PreProc">$cddb</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">sed</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">s/\ \/\ /=/g</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Identifier">artist</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$title</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Identifier">album</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">$title</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">3</span><span class="Special">`</span>
<span class="Identifier">year</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> DYEAR </span><span class="PreProc">$cddb</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Identifier">comment</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> DISCID </span><span class="PreProc">$cddb</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">artist=</span><span class="PreProc">$artist</span><span class="Statement">&quot;</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">album=</span><span class="PreProc">$album</span><span class="Statement">&quot;</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">year=</span><span class="PreProc">$year</span><span class="Statement">&quot;</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">comment=</span><span class="PreProc">$comment</span><span class="Statement">&quot;</span>
<span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">continue ? (O/n) </span><span class="Statement">&quot;</span>
<span class="Statement">read</span> ret
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">=</span> <span class="Constant">n</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Statement">exit</span> <span class="Constant">0</span>
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="Constant">bitrate ? [</span><span class="PreProc">$bitrate</span><span class="Constant">] </span><span class="Statement">&quot;</span>
<span class="Statement">read</span> ret
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-n</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Identifier">bitrate</span>=<span class="PreProc">$ret</span>
<span class="Statement">fi</span>
<span class="Statement">mkdir</span> <span class="Statement">&quot;</span><span class="PreProc">$artist</span><span class="Constant"> - </span><span class="PreProc">$year</span><span class="Constant"> - </span><span class="PreProc">$album</span><span class="Statement">&quot;</span>
<span class="Statement">cd</span> <span class="Statement">&quot;</span><span class="PreProc">$artist</span><span class="Constant"> - </span><span class="PreProc">$year</span><span class="Constant"> - </span><span class="PreProc">$album</span><span class="Statement">&quot;</span>
<span class="Identifier">cddb</span>=<span class="Statement">&quot;</span><span class="Constant">../</span><span class="PreProc">$cddb</span><span class="Statement">&quot;</span>
<span class="Identifier">last</span>=<span class="Special">`</span><span class="Statement">ls</span><span class="Special"> ../*.wav </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">_</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">sed</span><span class="Special"> s/</span><span class="Special">\.</span><span class="Special">wav//g`</span>
<span class="Identifier">last</span>=<span class="Special">`</span><span class="Statement">echo</span><span class="Constant"> </span><span class="PreProc">${</span><span class="PreProc">last</span><span class="Statement">:0</span><span class="Statement">:2</span><span class="PreProc">}</span><span class="Constant"> </span><span class="Statement">|</span><span class="Special"> awk </span><span class="Statement">'</span><span class="Constant">{ print $0+0 }</span><span class="Statement">'</span><span class="Special">`</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">0</span><span class="Statement">; i </span><span class="Statement">&lt;</span><span class="Statement"> last; ++i</span><span class="Statement">))</span>; <span class="Statement">do</span>
    <span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">&quot;</span><span class="Constant">TTITLE</span><span class="PreProc">$i</span><span class="Constant">=</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="PreProc">$cddb</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
    <span class="Statement">(</span><span class="PreProc">(</span>track <span class="Statement">=</span> i + <span class="Constant">1</span><span class="PreProc">)</span><span class="Statement">)</span>
    <span class="Identifier">mp3</span>=<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$track</span><span class="Special">`</span><span class="Statement">&quot;</span><span class="Constant"> - </span><span class="PreProc">$title</span><span class="Constant">.mp3</span><span class="Statement">&quot;</span>
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> <span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Constant"> existe, ecraser ? (o/N) </span><span class="Statement">&quot;</span>
        <span class="Statement">read</span> ret
        <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> o <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
            <span class="Statement">continue</span>
        <span class="Statement">fi</span>
    <span class="Statement">fi</span>
    lame <span class="Statement">-s</span> <span class="Constant">44</span>.<span class="Constant">1</span> <span class="Statement">-m</span> j <span class="Statement">-q</span> <span class="Constant">0</span> <span class="Statement">-b</span> <span class="PreProc">$bitrate</span> <span class="Special">--cbr\</span>
      <span class="Special">--tt</span> <span class="Statement">&quot;</span><span class="PreProc">$title</span><span class="Statement">&quot;</span>\
      <span class="Special">--ta</span> <span class="Statement">&quot;</span><span class="PreProc">$artist</span><span class="Statement">&quot;</span>\
      <span class="Special">--tl</span> <span class="Statement">&quot;</span><span class="PreProc">$album</span><span class="Statement">&quot;</span>\
      <span class="Special">--tc</span> <span class="Statement">&quot;</span><span class="PreProc">$comment</span><span class="Statement">&quot;</span>\
      <span class="Special">--ty</span> <span class="PreProc">$year</span>\
      <span class="Special">--tn</span> <span class="PreProc">$track</span>\
    ../audio_<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$track</span><span class="Special">`</span>.wav <span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span>
<span class="Statement">done</span>

<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Comment"># playlist</span>
<span class="Comment"># ---------------------------------------------------------------------------- #</span>
<span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">-f</span> <span class="PreProc">$m3u</span> <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
    <span class="Statement">echo</span><span class="Constant"> -n </span><span class="Statement">&quot;</span><span class="PreProc">$m3u</span><span class="Constant"> existe, ecraser ? (o/N) </span><span class="Statement">&quot;</span>
    <span class="Statement">read</span> ret
    <span class="Statement">if </span><span class="Statement">[</span> <span class="Statement">&quot;</span><span class="PreProc">$ret</span><span class="Statement">&quot;</span> <span class="Statement">!=</span> o <span class="Statement">]</span><span class="Statement">;</span> <span class="Statement">then</span>
        <span class="Statement">exit</span> <span class="Constant">0</span>
    <span class="Statement">fi</span>
    <span class="Statement">rm</span> <span class="PreProc">$m3u</span>
<span class="Statement">fi</span>
<span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">#EXTM3U</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&gt;</span> <span class="PreProc">$m3u</span>
<span class="Statement">for ((</span><span class="Statement">i </span><span class="Statement">=</span><span class="Statement"> </span><span class="Constant">0</span><span class="Statement">; i </span><span class="Statement">&lt;</span><span class="Statement"> last; ++i</span><span class="Statement">))</span>; <span class="Statement">do</span>
    <span class="Identifier">title</span>=<span class="Special">`</span><span class="Statement">grep</span><span class="Special"> </span><span class="Statement">&quot;</span><span class="Constant">TTITLE</span><span class="PreProc">$i</span><span class="Constant">=</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="PreProc">$cddb</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> cut </span><span class="Special">-d</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">=</span><span class="Statement">'</span><span class="Special"> </span><span class="Special">-f</span><span class="Special"> </span><span class="Constant">2</span><span class="Special">`</span>
    <span class="Statement">(</span><span class="PreProc">(</span>track <span class="Statement">=</span> i + <span class="Constant">1</span><span class="PreProc">)</span><span class="Statement">)</span>
    <span class="Identifier">mp3</span>=<span class="Special">`</span><span class="Statement">printf</span><span class="Special"> %02d </span><span class="PreProc">$track</span><span class="Special">`</span><span class="Statement">&quot;</span><span class="Constant"> - </span><span class="PreProc">$title</span><span class="Constant">.mp3</span><span class="Statement">&quot;</span>
    <span class="Identifier">time</span>=<span class="Special">`mpg123 </span><span class="Special">-t</span><span class="Special"> </span><span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span><span class="Special"> </span><span class="Constant">2</span><span class="Statement">&gt;&amp;1</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> </span><span class="Statement">tail</span><span class="Special"> </span><span class="Special">-n</span><span class="Special"> </span><span class="Constant">1</span><span class="Special"> </span><span class="Statement">|</span><span class="Special"> \</span>
<span class="Special">        awk </span><span class="Special">-F</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">\\\[|:|]</span><span class="Statement">'</span><span class="Special"> </span><span class="Statement">'</span><span class="Constant">{ print $2 * 60 + $3 }</span><span class="Statement">'</span><span class="Special">`</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="Constant">#EXTINF:</span><span class="PreProc">$time</span><span class="Constant">,</span><span class="PreProc">$artist</span><span class="Constant"> - </span><span class="PreProc">$title</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&gt;&gt;</span> <span class="PreProc">$m3u</span>
    <span class="Statement">echo</span><span class="Constant"> </span><span class="Statement">&quot;</span><span class="PreProc">$mp3</span><span class="Statement">&quot;</span><span class="Constant"> </span><span class="Statement">&gt;&gt;</span> <span class="PreProc">$m3u</span>
<span class="Statement">done</span>
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->