...making Linux just a little more fun!
By Edgar Howell
What is described in the following may be illegal where you live. Where I live, the law permits making a small number of copies of the contents of legally acquired media for personal use as long as this does not involve circumventing copy protection. Strangely enough, "personal use" includes giving a copy to close relatives. And "small number" certainly is well under double-digits, but to my knowledge the courts have not yet made it explicit. You didn't expect the legislators -- politicians! -- to do that in the course of creating the legislation, did you?
For obvious reasons I would have much preferred to use the Ogg Vorbis format. Unfortunately the music player on the Zaurus couldn't handle Ogg, so MP3 it was. IANAL (I Am Not A Lawyer), I may be wrong, but as best I can determine, conversion to MP3 is permitted.
(It is interesting to consider the obligation of those subject to the law to observe it. Reasonable enough, right? When they can't even understand it without professional help?!)
From these considerations, I conclude that it would be prudent to remove all files created as described below before taking any storage medium across any international border. As usual, your call.
The first step in getting some music onto the Zaurus was to copy it to the hard disk on a PC - but never having done anything of the sort in the past, it was time to consult the oracle:
web@lohgoDELL:/tmp/CD> apropos CD rsyncd.conf (5) - configuration file for rsync in daemon mode reader.conf (5) - configuration file for pcscd readers' drivers pcscd (8) - PC/SC Smart Card Daemon cdparanoia 9.8 (Paranoia release III libcdio) (1) [cd-paranoia] - an audio CD reading utility which includes extra data verification features Encode::EBCDIC (3pm) - EBCDIC Encodings ...
This went on for a while but fortunately the reference to cd-paranoia was early in the list.
The man-page even included an example for an entire CD, "cd-paranoia -B", which is basically what I used. This simply puts the entire contents of the CD into the current directory with names like "track01.cdda.wav".
WAV files are, well, sizeable. That made it worthwhile looking into conversion into another format.
So here is a script to convert from WAV to Ogg:
#!/bin/bash /usr/bin/oggenc track$1\.cdda\.wav -o $1_$2\.ogg /bin/rm track$1\.cdda\.wav
It is executed as follows:
./wav2ogg 01 Melanie=The_Nickel_Song
to convert 'track01.cdda.wav' into '01_Melanie=The_Nickel_Song.ogg'.
In fact, if you start cd-paranoia in one window and wait until the first track is available, in another window you can almost keep up with it converting formats and assigning reasonable names. It takes about 15 to 20 minutes to do a CD.
[ Conversely, you could automate the process with this timely 2-cent tip. -- Ben ]
There are "better" approaches. You can create playlists and go out to the Internet to get track information. But my goal was to have a convenient may of occasionally copying a CD to the Zaurus to be listened to for a while before erasing it to recover space.
Unfortunately the Zaurus doesn't handle Ogg - at least I haven't been able to figure it out. Even more unfortunately, because of the size of the WAV files, the script erases them after conversion - but I didn't want to have to read the CD again and then go through the process of assigning titles.
Well, careful reading of the documentation pointed me at 'ogg123' and resulted in the following script:
#!/bin/bash /usr/bin/ogg123 -d wav -f $1\.wav $1\.ogg
It is executed as follows:
to convert '01_Melanie=The_Nickel_Song.ogg' into '01_Melanie=The_Nickel_Song.wav'
Interestingly enough, this is extremely fast.
This is where things got a bit complicated. MP3 is subject to certain restrictions and SuSE no longer includes anything dealing with it. But there was a reference to LAME, which I obtained from Sourceforge.
The directions provided by SuSE seemed a bit complicated to me -- construct an RPM out of a tar-ball and then install it? As root I just did the following:
cd /usr/src/packages/SOURCES/lame-3.93.1 ./configure make make install
Having done this, the following script
#!/bin/bash /usr/local/bin/lame track$1\.cdda\.wav -o $1_$2\.mp3 /bin/rm track$1\.cdda\.wav
can be executed as follows:
./wav2mp3 01 Melanie=The_Nickel_Song
to convert 'track01.cdda.wav' into '01_Melanie=The_Nickel_Song.mp3'
For the sake of completeness I should mention that there is an inconsistency in the names used in all that fumbling about, sometimes 'cdda.wav' and sometimes just 'wav'. This merely reflects the status as work in progress. Ultimately I used the following two scripts ('ogg2wav2mp3' and 'wav2mp3_2') to convert an entire CD in its own directory from OGG to MP3 all at once:
#!/bin/bash for i in *.ogg;do /tmp/CD/ogg2wav $(basename $i .ogg);echo $? $i;done for i in *.wav;do /tmp/CD/wav2mp3_2 $(basename $i .wav);echo $? $i;done rm *.wav
#!/bin/bash /usr/local/bin/lame $1\.wav -o $1\.mp3
It is interesting to note the differences in file sizes.
web@lohgoDELL:/tmp/CD> ll *01* -rw-r--r-- 1 web users 3682219 2006-07-29 15:47 01_Melanie=The_Nickel_Song.wav.2.mp3 -rw-r--r-- 1 web users 3087829 2006-07-29 15:45 01_Melanie=The_Nickel_Song.wav.2.ogg -rw-r--r-- 1 web users 40581452 2006-07-29 15:51 01_Melanie=The_Nickel_Song.wav.2.ogg.2.wav -rw-r--r-- 1 web users 40581452 2006-07-29 14:34 track01.cdda.wav
And interestingly enough, converting back to WAV produces a file of the same size but it isn't identical.
web@lohgoDELL:/tmp/CD> diff 01_Melanie\=The_Nickel_Song.wav.2.ogg.2.wav track01.cdda.wav Files 01_Melanie=The_Nickel_Song.wav.2.ogg.2.wav and track01.cdda.wav differ
Presumably such manipulations will have an impact on the quality of the recording, but a mobile music player certainly can't claim to be high-fidelity - and I am extremely happy with the sound on the headphones.
Edgar is a consultant in the Cologne/Bonn area in Germany.
His day job involves helping a customer with payroll, maintaining
ancient IBM Assembler programs, some occasional COBOL, and
otherwise using QMF, PL/1 and DB/2 under MVS.
(Note: mail that does not contain "linuxgazette" in the subject will be
(Note: mail that does not contain "linuxgazette" in the subject will be rejected.)