LDP/LDP/howto/docbook/MP3-CD-Burning.sgml

400 lines
17 KiB
Plaintext
Raw Normal View History

2001-05-29 16:24:07 +00:00
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
<article>
<artheader>
<title>Linux MP3 CD Burning mini-HOWTO</title>
2002-04-28 01:21:59 +00:00
<pubdate>2001-05-29</pubdate>
2001-05-29 16:24:07 +00:00
<author>
<firstname>Greg</firstname>
<surname>Wierzchowski</surname>
<affiliation>
2002-04-28 01:21:59 +00:00
<address><email>greg@draxen.org</email></address>
2001-05-29 16:24:07 +00:00
</affiliation>
</author>
<abstract>
2002-04-28 01:21:59 +00:00
<para>A complete recipe for creating audio and data CDs from MP3 files.</para>
2001-05-29 16:24:07 +00:00
</abstract>
<revhistory>
2002-04-28 01:21:59 +00:00
<revision>
<revnumber>2.0</revnumber>
<date>2002-04-26</date>
<authorinitials>GW</authorinitials>
<revremark>Divided into two sections: existing material to section "audio", new section "data" on data
CDs. Misc. additions.</revremark>
</revision>
2001-11-20 13:23:29 +00:00
<revision>
<revnumber>1.5</revnumber>
<date>2001-11-19</date>
<authorinitials>GW</authorinitials>
<revremark>Fixed omission in Disc-At-Once burning section.</revremark>
</revision>
2001-11-18 17:02:04 +00:00
<revision>
<revnumber>1.4</revnumber>
<date>2001-11-17</date>
<authorinitials>GW</authorinitials>
<revremark>Added Disc-At-Once burning section.</revremark>
</revision>
2001-09-03 16:16:08 +00:00
<revision>
<revnumber>1.3</revnumber>
<date>2001-09-02</date>
<authorinitials>GW</authorinitials>
<revremark>Added another example of decoding MP3 files with lame.</revremark>
</revision>
2001-07-14 01:09:06 +00:00
<revision>
<revnumber>1.2</revnumber>
<date>2001-07-12</date>
<authorinitials>GW</authorinitials>
<revremark>Minor layout changes; Added Translations subsection into Credits.</revremark>
</revision>
2001-07-02 14:44:29 +00:00
<revision>
<revnumber>1.1</revnumber>
<date>2001-06-12</date>
<authorinitials>GW</authorinitials>
<revremark>Minor cleanup; Regexp fix for MP3 to WAV name conversion example.</revremark>
</revision>
2001-05-29 16:24:07 +00:00
<revision>
<revnumber>1.0</revnumber>
<date>2001-05-29</date>
<authorinitials>GW</authorinitials>
<revremark>Initial Release.</revremark>
</revision>
</revhistory>
2001-09-03 16:16:08 +00:00
<keywordset>
<keyword>
MP3
</keyword>
<keyword>
CD
</keyword>
<keyword>
audio
</keyword>
<keyword>
recording
</keyword>
<keyword>
burning
</keyword>
<keyword>
WAV
</keyword>
<keyword>
music
</keyword>
</keywordset>
2001-05-29 16:24:07 +00:00
</artheader>
2001-07-14 01:09:06 +00:00
<section id="intro"><title>Introduction</title>
2001-05-29 16:24:07 +00:00
<para>
This mini-HOWTO was created because of my experience with burning music CDs
and lack of some specific information about sound normalization on the
Internet. I usually burn music CDs as a mix - different songs from different
sources.Very often volume level between songs varies greatly. This is the
first obstacle. Second, many of the files on the Internet are not
CD-compatible (16 bit, stereo, 44.1 kHz) and have to be converted. There are
many programs to burn music CDs from MP3 files, and many of them do the
conversion transparently. But I haven't seen a single tool that also
normalizes the volume, so that's why I worked out my own CD-burning recipe.
</para>
2002-04-28 01:21:59 +00:00
<para>
This HOWTO is just about one thing - putting MP3 music on a CD, so that you can
listen to it. For in-depth information about MP3 files, please look at <emphasis>The Linux MP3
HOWTO</emphasis> by Phil Kerr, located at <ulink
url="http://www.tldp.org/HOWTO/MP3-HOWTO.html">http://www.tldp.org/HOWTO/MP3-HOWTO.html</ulink>.
For information about CD creation in general as well as CD burners, refer to
<emphasis>CD-Writing-HOWTO</emphasis> by Winfried Tr<54>mper, available at <ulink
url="http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html">http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html</ulink>.
</para>
2001-05-29 16:24:07 +00:00
<para>
I'm assuming you wish to burn a CD with the collection of songs you obtained
from different sources, all varying quality, but you want to get the
best-sounding CD possible. This mini-HOWTO outlines the steps that may
help you.
</para>
2001-07-14 01:09:06 +00:00
<section id="copyright"><title>Copyright and License</title>
2001-05-29 16:24:07 +00:00
<para>This document is copyright 2001 by Greg Wierzchowski and is released under
the terms of the GNU Free Documentation License, which is hereby incorporated
by reference. Send feedback to
<ulink url="mailto:greg.wierzchowski@usa.net"><citetitle>greg.wierzchowski@usa.net</citetitle></ulink>.
</para>
2001-07-14 01:09:06 +00:00
</section>
</section>
2001-05-29 16:24:07 +00:00
2002-04-28 01:21:59 +00:00
<section id="audio"><title>Audio CDs</title>
2001-07-14 01:09:06 +00:00
<section id="prepare"><title>Preparing the Tracks</title>
2001-05-29 16:24:07 +00:00
<para>
<note><title>Note</title><para>All commands assume bash shell</para></note>
</para>
<orderedlist>
<listitem><para>Collect all MP3 files in one directory. </para></listitem>
2002-04-28 01:21:59 +00:00
<listitem><para>If your MP3 files came from DOS/Windows, they may have
uppercase extensions. You can convert whole names to lowercase or just
extensions. For everything lowercase do:</para>
<programlisting>
for i in *.[Mm][Pp]3; do mv "$i" `echo $i | tr '[A-Z]' '[a-z]'`; done </programlisting>
<para>to convert just extensions:</para>
<programlisting>
for i in *.MP3; do mv "$i" "`basename "$i" .MP3`.mp3"; done
</programlisting>
</listitem>
2001-05-29 16:24:07 +00:00
<listitem><para>If any filenames contain spaces, first convert them to underscores: </para>
<programlisting>
for i in *.mp3; do mv "$i" `echo $i | tr ' ' '_'`; done </programlisting>
</listitem>
2002-04-28 01:21:59 +00:00
2001-05-29 16:24:07 +00:00
<listitem><para>Convert them to WAV with the command: </para>
<programlisting>
for i in *.mp3; do mpg123 -w `basename $i .mp3`.wav $i; done </programlisting>
2002-04-28 01:21:59 +00:00
<para>When decoding 22khz MP3 files the output of <command>mpg123</command> may be distorted. To fix this,
use:</para>
<programlisting>
for i in *.mp3; do mpg123 --rate 44100 --stereo --buffer 3072 --resync -w `basename $i .mp3`.wav $i; done
</programlisting>
2001-05-29 16:24:07 +00:00
<para><citetitle>Mpg123</citetitle> should be present in any Linux
distribution, but if you don't have it, get it at
<ulink url="http://www.mpg123.de/">http://www.mpg123.de/</ulink>.
2001-07-14 01:09:06 +00:00
</para><para><emphasis>NOTE</emphasis> I noticed that with some MP3 files mpg123 output was distorted.
2001-05-29 16:24:07 +00:00
At first I thought that MP3's were bad, but then I checked with another
player and they sounded OK. So I searched for another MP3 player that
could write WAV files to disk, and found this one: <citetitle>MAD mp3 decoder</citetitle> at
<ulink url="http://www.mars.org/home/rob/proj/mpeg/">http://www.mars.org/home/rob/proj/mpeg/</ulink>.
With <citetitle>madplayer</citetitle>, the command line is: </para>
<programlisting>
for i in *.mp3; do madplay -o `basename $i .mp3`.wav $i; done </programlisting>
<para>
2001-09-03 16:16:08 +00:00
There is yet another way to do the conversion. Some MP3 files apparently give both <command>mpg123</command> and
<command>madplay</command> trouble with decoding. The <command>lame</command> encoder, which has a decoding mode, seems
to handle difficult cases very well (<command>lame</command> can be found at <ulink url="http://www.mp3dev.org/mp3/">http://www.mp3dev.org/mp3/</ulink>) :
</para>
<programlisting>
for i in *.mp3; do lame --decode $i `basename $i .mp3`.wav; done
</programlisting>
<para>
2001-05-29 16:24:07 +00:00
<emphasis>NOTE:</emphasis> The <command>`basename $i .mp3`.wav</command> command
replaces MP3 extensions with WAV. There are 101 ways to do that, here's
2001-07-02 14:44:29 +00:00
the alternative: <command>`echo "$1" | sed 's/\.mp3$/.wav/'`</command>
2001-05-29 16:24:07 +00:00
</para></listitem>
<listitem><para>Run &quot;<command>file *.wav</command>&quot; and check the
output for any files different from 16 bit, stereo 44100 Hz.</para></listitem>
<listitem><para>If there are files with different characteristics, convert them to the
above specs. For example, to convert file track01.wav to obtain sample
rate 44.1 kHz, you could use: </para>
<programlisting>
2002-04-28 01:21:59 +00:00
sox track01.wav -r 44100 track01-new.wav resample
</programlisting>
<para>or, if the above introduces static when converting mono files:</para>
<programlisting>
sox track01.wav -r 44100 -c 2 track01-new.wav
</programlisting>
2001-05-29 16:24:07 +00:00
<para><citetitle>Sox</citetitle> is so popular, that it's probably installed
by default with any Linux distribution, and can be obtained from
<ulink url="http://www.spies.com/Sox/">http://www.spies.com/Sox/</ulink>.
However, the command-line options are somewhat cryptic for the casual
user (me). Look at
<ulink url="http://www.spies.com/Sox/sox.tips.html">http://www.spies.com/Sox/sox.tips.html</ulink>
for some tips on usage.
</para></listitem>
<listitem><para>Normalize your WAV files, to avoid drastic differences in volume
2001-07-02 14:44:29 +00:00
levels. I use a program by Chris Vaill (<email>cvaill@cs.columbia.edu</email>), called
2001-05-29 16:24:07 +00:00
<command>normalize</command> - it can be obtained from
<ulink url="http://www.cs.columbia.edu/~cvaill/normalize/">http://www.cs.columbia.edu/~cvaill/normalize/</ulink>
</para>
<para>
I use the following
syntax (-m is for mix mode, where all files should be as loud as
possible):</para>
<programlisting>
normalize -m *.wav</programlisting>
</listitem>
</orderedlist>
2001-07-14 01:09:06 +00:00
</section>
2001-05-29 16:24:07 +00:00
2001-07-14 01:09:06 +00:00
<section id="burning"><title>Burning Your CD</title>
2001-05-29 16:24:07 +00:00
<para>
There are many programs to create CDs from WAV files. I use <command>cdrecord</command> for
command-line burning and <command>XCDROAST</command> for gui. For <command>cdrecord</command>,
you have to know
what SCSI device your CD-writer is. If you're using ATAPI writer, use SCSI
emulation (kernel module ide-scsi). Let's assume, that your ATAPI cdwriter
is on the second IDE bus as a master. Thus, it will have <filename>/dev/hdc</filename> device
file. To instruct the kernel that you want to treat it as a SCSI device, add
the following line to <filename>/etc/lilo.conf</filename>: </para>
<programlisting>
append=" hdc=ide-scsi"
</programlisting>
<para>
Also, if your kernel doesn't automatically load ide-scsi module, add
2001-07-02 14:44:29 +00:00
<command>insmod ide-scsi</command> into your <filename>rc.local</filename>
2001-05-29 16:24:07 +00:00
(or equivalent) file. Once you have our CD-writer recognized as a
2001-07-02 14:44:29 +00:00
SCSI device, run <command>cdrecord --scanbus</command> to
2001-05-29 16:24:07 +00:00
find out what's the "dev" parameter to cdrecord. On my system, the
output looks like the following: </para>
<programlisting>
scsibus1:
1,0,0 100) 'IOMEGA ' 'ZIP 250 ' '51.G' Removable Disk
1,1,0 101) 'HP ' 'CD-Writer+ 7100 ' '3.01' Removable CD-ROM
</programlisting>
<para>
2001-07-14 01:09:06 +00:00
So, the <command>cdrecord</command> command line will contain <command>dev=1,1,0</command> to specify the
2001-05-29 16:24:07 +00:00
device. Here is the complete command on my system: </para>
<programlisting>
cdrecord dev=1,1,0 -eject speed=2 -pad -audio *.wav
</programlisting>
2001-07-14 01:09:06 +00:00
<note><title>NOTE</title><para> The -pad argument is neccessary,
2001-05-29 16:24:07 +00:00
because all audio tracks on the CD must be adjusted for the proper
data length, which is not always the case with mp3 files. </para></note>
2001-11-18 17:02:04 +00:00
</section>
<section id="dao-burning"><title>Burning a DAO CD</title>
<para>
DAO, Disc-At-Once, is as of now the only method for burning a CD without a 2-second pause between the tracks.
It's useful for burning party mixes. The program for burning CDs in DAO mode is <command>cdrdao</command>, available from SourceForge, <ulink url="http://sourceforge.net/projects/cdrdao/">http://sourceforge.net/projects/cdrdao/</ulink>.
</para><para>
The <command>cdrdao</command> program uses description files called <emphasis>TOC</emphasis> (Table Of Contents, of course). There are two ways to create such file. First is to use a shell script, distributed with <command>cdrdao</command> source (in <filename>contrib</filename> directory, called <command>generate_toc.sh</command>. It takes a list of <filename>.wav</filename> files as an argument and produces a <filename>cd.toc</filename> file. Second way is to simply create such file yourself in a text editor of your choice. Here is a self-explanatory example:</para>
<programlisting>
CD_DA
TRACK AUDIO
AUDIOFILE "mix-01.wav" 0
TRACK AUDIO
AUDIOFILE "mix-02.wav" 0
TRACK AUDIO
AUDIOFILE "mix-03.wav" 0
TRACK AUDIO
AUDIOFILE "mix-04.wav" 0
TRACK AUDIO
AUDIOFILE "mix-05.wav" 0
</programlisting>
<para>
2002-04-28 01:21:59 +00:00
The <emphasis>0</emphasis> (zero) after the wave filename means start from the beginning of the file. There can be a second number providing the length (time) of file to record. The <command>xcdroast</command> creates similar <emphasis>TOC</emphasis> files, there are also examples in <filename>testtocs</filename> directory of <command>cdrdao</command> source.
2001-11-18 17:02:04 +00:00
</para>
2001-11-20 13:23:29 +00:00
<para>
The <command>cdrdao</command> by default uses the device <filename>/dev/cdrecorder</filename>, which should be a link to the cdwriter device. Assuming your cd recorder device file is <filename>/dev/scd0</filename>, create the link (as root) as follows:
</para>
<programlisting>
ln -s /dev/scd0 /dev/cdrecorder
</programlisting>
<para>
Then, assuming that the <emphasis>TOC</emphasis> file is named <filename>cd.toc</filename> the command to burn the cd is simply:
</para>
<programlisting>
cdrdao write cd.toc
</programlisting>
2001-07-14 01:09:06 +00:00
</section>
2002-04-28 01:21:59 +00:00
<section id="software"><title>Software</title>
<para>
There are some programs available, that can automate the process of creating CDs from MP3 files. Here is
arbitrarily selected list:</para>
<itemizedlist>
<listitem>
<para>
<emphasis>burnmp3</emphasis> - Program to automate burning with DAO method. <ulink
url="http://richardsnow.bizland.com/burnmp3/">http://richardsnow.bizland.com/burnmp3/</ulink>. </para>
</listitem>
2001-05-29 16:24:07 +00:00
2002-04-28 01:21:59 +00:00
<listitem><para>
<emphasis>mp32dao</emphasis> - a script from <emphasis>cdrdao</emphasis> distribution, in the
<emphasis>contrib</emphasis> directory. <ulink
url="http://cdrdao.sourceforge.net/">http://cdrdao.sourceforge.net/</ulink>.</para>
</listitem>
</itemizedlist>
</section>
</section>
<section id="data"><title>Data CDs</title>
<para>
<note><title>Note</title><para>This section is a work in progress, you're looking at initial, very sparse version.</para></note>
</para>
<para>
With increasing popularity of CD/MP3 players burning data CDs for listening purposes become practical. The advantage is definitely being able to squeeze ten times more music onto one CD (a very approximate figure).
As far as MP3 data CD-s, they're just a regular, standard data CD's (ISO9660) with MP3 music as regular files. All MP3-CD players I know accept CD-s with directories in them, and I usually burn CD with Joliet extension and they work just fine. So to burn such a CD under linux, you first need to create an ISO image an then burn it on the CD as in the example below:
</para>
<programlisting>
mkisofs -J -o /tmp/mymp3s.iso /home/greg/mp3s/
cdrecord dev=1,0,0 speed=16 /tmp/mymp3s.iso
</programlisting>
<para>
That's it!
</para>
<para>
I have yet to research ability to normalize mp3 files directly - however I believe it always involves decompressing, normalization and then re-compressing the file, which introduces quality loss. Stay tuned!
</para>
</section>
2001-07-14 01:09:06 +00:00
<section id="credits"><title>Credits</title>
2001-07-02 14:44:29 +00:00
<para>
2001-07-14 01:09:06 +00:00
Special thanks to all the people who contribute to the Linux community and who made this HOWTO possible.
</para>
<section id="translations"><title>Translations</title>
2001-07-02 14:44:29 +00:00
<itemizedlist>
2001-07-14 01:09:06 +00:00
<listitem>
<para>
Im Eunjea - Translated this document to Korean, URL is <ulink url="http://kltp.kldp.org/eunjea/mp3_burning/">http://kltp.kldp.org/eunjea/mp3_burning/</ulink>.
2001-07-02 14:44:29 +00:00
</para>
2001-07-14 01:09:06 +00:00
</listitem>
<listitem>
<para>
Mendel L Chan - Translated this document to Chinese, URL is <ulink url="http://www.linux.org.tw/CLDP/mini/MP3-CD-Burning/">http://www.linux.org.tw/CLDP/mini/MP3-CD-Burning/</ulink>.
</para>
</listitem>
2002-04-28 01:21:59 +00:00
<listitem>
<para>
Chie Nakatani - Translated this document to Japanese, URL is <ulink url="http://www.linux.or.jp/JF/JFdocs/MP3-CD-Burning/index.html">http://www.linux.or.jp/JF/JFdocs/MP3-CD-Burning/index.html</ulink>.
</para>
</listitem>
2001-07-14 01:09:06 +00:00
</itemizedlist>
</section>
<section id="othercredits"><title>Other Credits</title>
<itemizedlist>
<listitem>
<para> Greg Ferguson - Initially converted this document from HTML to SGML.
</para></listitem>
<listitem>
<para> Rob Russell - Corrected my name conversion example.
</para></listitem>
<listitem>
<para> Terry Davis - Suggested submitting my HOWTO to linuxdoc.
</para></listitem>
<listitem>
2001-09-03 16:16:08 +00:00
<para>Chris Vaill - Created <command>normalize</command> program.
</para></listitem>
<listitem>
2002-04-28 01:21:59 +00:00
<para>Jamie Kellogg - Submitted a solution to decode with <command>lame</command> for troublesome files.
</para></listitem>
<listitem>
<para>Tom Panning - Submitted a tip for the conversion of mono files with sox.
</para></listitem>
<listitem>
<para>Adam Buckley - Submitted an idea about files with uppercase extension.
</para></listitem>
<listitem>
<para>Ilia Lobsanov - Submitted options for mpg123 decoding 22kHz files.
2001-07-14 01:09:06 +00:00
</para></listitem>
</itemizedlist>
</section>
</section>
2001-05-29 16:24:07 +00:00
</article>