Hack 39. Burn Audio CDs from the Command Line
Use cdrecord directly from the command line to create your own audio CDs.
There are a lot of advanced GUI programs for Linux that make it easy to burn your own audio CDs from files you have on your computer. Almost all of these programs, however, still function as a frontend for cdrecordthe command-line CD-burning Swiss Army knife. While GUIs are nice, for basic audio CDs, you'll find that it's almost as easy to burn the CD directly from the command line. This hack walks you through the process of preparing and burning your own audio CD from standard audio files you might have on your system.
The first step to burn an audio CD is to prepare the audio files. In the past audio files had to be converted to CDDA format for cdrecord to recognize them, but nowadays cdrecord works equally well with WAV files. Depending on the format of your audio files, you will use different tools to convert them to WAV files. Converting from autio format to another is discussed in [Hack #35].
Once your audio files are ready, the next step is to discover which CD-ROM device cdrecord will use. Run cdrecord with the -scanbus argument and cdrecord will probe and detect any CD burners on your system and which device entry to use. The exact method to use will vary depending on whether you use the 2.4 or 2.6 kernel series. The 2.4 kernel series required that CD burners use SCSI emulation with the ide-scsi module, so your IDE CD burner on /dev/hdc might be accessed through /dev/scd0 instead. Most modern distributions that still use 2.4 will turn on SCSI emulation for you so you shouldn't have to worry about setting it up. In the 2.6 kernel series you no longer have to use SCSI emulation and can write directly to the IDE device, but you have to tell cdrecord about this fact. To scan for IDE CD burners with 2.4 kernels (or if you use SCSI CD burners), run this:
$ cdrecord -scanbus
If you use the 2.6 kernel, add the dev=ATA: option:
$ cdrecord dev=ATA: -scanbus
In either case, you will see output much like the following:
scsibus1: 1,0,0 100) 'MATSHITA' 'DVD-RAM UJ-822S ' '1.01' Removable CD-ROM 1,1,0 101) * 1,2,0 102) * 1,3,0 103) * 1,4,0 104) * 1,5,0 105) * 1,6,0 106) * 1,7,0 107) *
In my case, my DVD writer is listed with the device number 1,0,0. If you had more than one CD-ROM drive installed, you would need to choose which one you wish to use by the extra device descriptions cdrecord outputs. Once your device number is identified, change to the directory containing the WAV or CDDA files you want to burn. If you use a 2.4 kernel, run:
$ cdrecord -v dev=1,0,0 -audio track01.wav track02.wav track03.wav
If you use a 2.6 kernel, modify the dev argument slightly:
$ cdrecord -v dev=ATA:1,0,0 -audio track01.wav track02.wav track03.wav
If you have converted files from some other audio format into WAV, add the -pad option to cdrecord so that it will ensure the WAV is padded to be a multiple of 2,352 bytesa cdrecord requirement.
In both examples, replace the dev argument with the device number for your CD drive. This command tells cdrecord to burn track01.wav, track02.wav, and track03.wav to an audio CD. If your WAV or CDDA files are already in order in the directory, you can also use a shell glob (like *.wav) instead of typing out each file manually. This example uses TAO (Track At Once) recording, which means that each audio track will be spaced by two seconds of silence. If you want more or less of a gap in between tracks you will need to resort to the more complicated DAO (Disk At Once) method if your drive supports it. Because of the many extra steps it involves, if you want to go the DAO route I recommend you use a graphical CD-burning tool as decribed in [Hack #40].