mirror of https://github.com/tLDP/LDP
400 lines
17 KiB
Plaintext
400 lines
17 KiB
Plaintext
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
|
||
<article>
|
||
<artheader>
|
||
<title>Linux MP3 CD Burning mini-HOWTO</title>
|
||
<pubdate>2001-05-29</pubdate>
|
||
<author>
|
||
<firstname>Greg</firstname>
|
||
<surname>Wierzchowski</surname>
|
||
<affiliation>
|
||
<address><email>greg@draxen.org</email></address>
|
||
</affiliation>
|
||
</author>
|
||
<abstract>
|
||
<para>A complete recipe for creating audio and data CDs from MP3 files.</para>
|
||
</abstract>
|
||
<revhistory>
|
||
<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>
|
||
<revision>
|
||
<revnumber>1.5</revnumber>
|
||
<date>2001-11-19</date>
|
||
<authorinitials>GW</authorinitials>
|
||
<revremark>Fixed omission in Disc-At-Once burning section.</revremark>
|
||
</revision>
|
||
<revision>
|
||
<revnumber>1.4</revnumber>
|
||
<date>2001-11-17</date>
|
||
<authorinitials>GW</authorinitials>
|
||
<revremark>Added Disc-At-Once burning section.</revremark>
|
||
</revision>
|
||
<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>
|
||
<revision>
|
||
<revnumber>1.2</revnumber>
|
||
<date>2001-07-12</date>
|
||
<authorinitials>GW</authorinitials>
|
||
<revremark>Minor layout changes; Added Translations subsection into Credits.</revremark>
|
||
</revision>
|
||
<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>
|
||
<revision>
|
||
<revnumber>1.0</revnumber>
|
||
<date>2001-05-29</date>
|
||
<authorinitials>GW</authorinitials>
|
||
<revremark>Initial Release.</revremark>
|
||
</revision>
|
||
</revhistory>
|
||
<keywordset>
|
||
<keyword>
|
||
MP3
|
||
</keyword>
|
||
<keyword>
|
||
CD
|
||
</keyword>
|
||
<keyword>
|
||
audio
|
||
</keyword>
|
||
<keyword>
|
||
recording
|
||
</keyword>
|
||
<keyword>
|
||
burning
|
||
</keyword>
|
||
<keyword>
|
||
WAV
|
||
</keyword>
|
||
<keyword>
|
||
music
|
||
</keyword>
|
||
</keywordset>
|
||
|
||
</artheader>
|
||
|
||
|
||
<section id="intro"><title>Introduction</title>
|
||
|
||
<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>
|
||
|
||
<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>
|
||
<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>
|
||
|
||
<section id="copyright"><title>Copyright and License</title>
|
||
<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>
|
||
</section>
|
||
</section>
|
||
|
||
<section id="audio"><title>Audio CDs</title>
|
||
<section id="prepare"><title>Preparing the Tracks</title>
|
||
<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>
|
||
|
||
<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>
|
||
|
||
<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>
|
||
|
||
|
||
<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>
|
||
<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>
|
||
<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>.
|
||
</para><para><emphasis>NOTE</emphasis> I noticed that with some MP3 files mpg123 output was distorted.
|
||
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>
|
||
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>
|
||
<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
|
||
the alternative: <command>`echo "$1" | sed 's/\.mp3$/.wav/'`</command>
|
||
</para></listitem>
|
||
|
||
<listitem><para>Run "<command>file *.wav</command>" 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>
|
||
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>
|
||
<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
|
||
levels. I use a program by Chris Vaill (<email>cvaill@cs.columbia.edu</email>), called
|
||
<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>
|
||
|
||
</section>
|
||
|
||
<section id="burning"><title>Burning Your CD</title>
|
||
<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
|
||
<command>insmod ide-scsi</command> into your <filename>rc.local</filename>
|
||
(or equivalent) file. Once you have our CD-writer recognized as a
|
||
SCSI device, run <command>cdrecord --scanbus</command> to
|
||
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>
|
||
So, the <command>cdrecord</command> command line will contain <command>dev=1,1,0</command> to specify the
|
||
device. Here is the complete command on my system: </para>
|
||
<programlisting>
|
||
cdrecord dev=1,1,0 -eject speed=2 -pad -audio *.wav
|
||
</programlisting>
|
||
|
||
<note><title>NOTE</title><para> The -pad argument is neccessary,
|
||
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>
|
||
|
||
</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>
|
||
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.
|
||
</para>
|
||
<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>
|
||
</section>
|
||
<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>
|
||
|
||
<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>
|
||
<section id="credits"><title>Credits</title>
|
||
<para>
|
||
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>
|
||
<itemizedlist>
|
||
<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>.
|
||
</para>
|
||
</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>
|
||
<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>
|
||
</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>
|
||
<para>Chris Vaill - Created <command>normalize</command> program.
|
||
</para></listitem>
|
||
<listitem>
|
||
<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.
|
||
</para></listitem>
|
||
</itemizedlist>
|
||
</section>
|
||
</section>
|
||
</article>
|
||
|