The Linux MP3 HOWTO
By Philip Kerr, phil@websentric.com
v1.10, September 1999
This document describes the hardware, software, and procedures needed
to encode and play MP3 sound files under Linux.
______________________________________________________________________
Table of Contents
1. Introduction.
2. Copyright of this document.
3. Where to get this document.
4. Acknowledgments.
5. Disclaimer.
6. Hardware Requirements & Performance Issues.
7. Software Requirements.
8. Setting up your system.
8.1 Setting up for Analogue Audio Capture.
8.2 Setting up for CD-ROM Audio Capture.
8.3 Additional Setting up.
9. Encoding from Audio.
10. Encoding from CD-ROM.
11. Playing MP3's.
12. Feedback.
______________________________________________________________________
1. Introduction.
This document describes the hardware, software and procedures needed
to encode and play MP3 sound files under Linux.
2. Copyright of this document.
This HOWTO is copyrighted 1999 Philip Kerr.
Unless otherwise stated, Linux HOWTO documents are copyrighted by
their respective authors. Linux HOWTO documents may be reproduced and
distributed in whole or in part, in any medium physical or electronic,
as long as this copyright notice is retained on all copies. Commercial
redistribution is allowed and encouraged; however, the author would
like to be notified of any such distributions.
All translations, derivative works, or aggregate works incorporating
any Linux HOWTO documents must be covered under this copyright notice.
That is, you may not produce a derivative work from a HOWTO and impose
additional restrictions on its distribution. Exceptions to these rules
may be granted under certain conditions; please contact the Linux
HOWTO co-ordinator at the address given below.
In short, we wish to promote dissemination of this information through
as many channels as possible. However, we do wish to retain copyright
on the HOWTO documents, and would like to be notified of any plans to
redistribute the HOWTOs.
If you have questions, please contact Tim Bynum, the Linux HOWTO co-
ordinator, at linux-howto@metalab.unc.edu via email.
3. Where to get this document.
The most recent official version of this document can be obtained from
the Linux Documentation Project .
4. Acknowledgments.
In writing this HOWTO I have had to draw heavily on the Sound-HOWTO By
Jeff Tranter, and the Sound-Playing-HOWTO By Yoo C. Chung.
Thanks also to the other HOWTO authors whose works I have referenced:
Linux System Administrators Guide By Lars Wirzenius.
Linux Network Administrators Guide By Olaf Kirch.
Multi Disk System Tuning HOWTO By Stein Gjoen.
5. Disclaimer.
Use the information in this document at your own risk. I disavow any
potential liability for the contents of this document. Use of the
concepts, examples, and/or other content of this document is entirely
at your own risk.
All copyrights are owned by their owners, unless specifically noted
otherwise. Use of a term in this document should not be regarded as
affecting the validity of any trademark or service mark.
Naming of particular products or brands should not be seen as
endorsements. You are strongly recommended to take a backup of your
system before major installation and backups at regular intervals.
6. Hardware Requirements & Performance Issues.
Digital Audio processing is a resource intensive task that relies
heavily on the processing and I/O capabilities of a system. I would
strongly recommend a Pentium class machine as a minimum.
If you are going to be encoding from an analogue audio source, a PCI
soundcard will give the best results. The I/O performance difference
between an ISA and PCI based card is significant, over 132 Mbits/sec
for PCI (quote taken from the PCI-HOWTO). Naturally, the better the
quality of the soundcard in terms of its signal-to-noise ratio, the
better the encoded MP3. I've been using the Soundblaster PCI128 and
just switched over to a Soundblaster Live Value; both cards give good
audio performance, but the Live has significantly better S/N ratios,
good enough for semi-pro audio work. Remember the old data processing
maxim:- garbage in - garbage out!
When recording analogue audio to a hard disk, more commonly referred
to as direct to disk or d2d recording, the performance of the disk,
and its interface is critical. If you are using an IDE based based
system, mode 4 or UDMA is preferable as they have a semi-decent
transfer rate.
The ideal solution would be to use a SCSI based system as the drives
and interface have far better throughput capabilities, a sustained
5mbits/sec for SCSI 1 through to 80mbits/sec for ultra/wide SCSI. IDE
can peak at anything from 8.3 MB/s to 33 MB/s for Ultra-ATA but these
speeds are peak, average transfer rates will be slower. If you can
find, or afford, an AV SCSI drive, go for it. AV drives have had the
read/write head system optimised for continuous data transference;
other SCSI and IDE drives normally cannot sustain continuous data
transfer as the write head heats up!
Naturally a drive that has cache will give more consistent results
than one that doesn't, as the cache will act as a buffer if the heads
do lift or it cannot handle the throughput.
If your drive isn't up to spec, your recording will suffer from
dropouts and glitches, where the drive failed to record the signal.
If you are recording one-off events, such as live performances invest
in a good SCSI based disk system.
Another cause of d2d dropouts is a heavily loaded system. Background
tasks can cause the system to momentarily glitch. Its recommended to
run as few background services as you can, especially networked based
services. For more information about setting network services, and
startup scripts please refer to the SAG and NAG guides.
Virtual memory paging will also cause glitches, so run with as much
physical RAM as you can, I'd recommend at least 32 Mb, but you may
well need more.
For those wanting to extract the most out of their system, optimising
the kernel probably wouldn't do any harm either.
While the hardware specifications above will give you a decent system
to encode audio data, don't discount using older, lower spec kit if
that's all you have access to.
It'll be a good challenge for a sys-admin to tweak a low-spec system
to give good results, and the end result will probably be a happier
Linux box.
Another important issue is the audio cabling. Cheap, poor quality
cables and connectors will result in poor recording quality. If your
soundcard has the option to use phono, sometimes referred to as RCA,
connectors, use them. Gold plated contacts will also help maintain
audio quality, as will keeping audio cables away from data cables as
there will be a chance of interference between them.
But don't forget, spending a fortune on the best audio cabling will be
lost if the rest of the system hasn't been optimised.
For encoding mp3's from CD-ROM, the speed or type of drive will
determine the time taken to read the raw information from it. A
single speed drive will probably be too slow for all but the most
patient.
Your CD-ROM must be connected to your soundcard, either using the
internal connector, or by taking the headphone's output and patching
it into the line-in on the soundcard.
For detailed instructions on setting up soundcards, now would be an
excellent time to read the Sound-HOWTO.
7. Software Requirements.
Converting audio to MP3's is normally a 2 stage process, first the
audio is recorded into a WAV format, then the WAV is then converted
into an MP3. Depending on what format you wish to encode audio from,
CD or direct audio, will determine what software tools you need to
produce the WAV file.
If you are wanting to encode from audio input, you will need a program
that will record from your soundcard's input and save the results in a
WAV format. Below are some useful utilities.
Wavrec
Wavrec is distributed as part of wavplay, which can be downloaded
from:-
To convert CD audio data to WAV format, sometimes known as CD ripping:
CDDA2WAV
Cdparanoia
To convert the WAV file, to MP3 format:
Blade's MP3 Encoder
To play the MP3 you will need a player:
Xmms (Formerly known as X11Amp)
Xaudio
You may also need a mixer program; Xmixer works well and is included
with most distributions.
8. Setting up your system.
This section will describe the basics of setting up your Linux system
to record audio from either an analogue or CD-ROM source.
I'm basing this section around my Intel based Linux system which is
running Redhat 5.2, but should be reasonably distribution neutral.
I'll be working on the Sparc platform version shortly. (if you have
any success in using this HOWTO on other hardware, please get in
touch).
Naturally a reasonable prerequisite is a working soundcard. At this
point in the HOWTO, I invite you to read the excellent Linux Sound
HOWTO, by Jeff Tranter. After which a good read of the Linux Sound
Playing HOWTO, by Yoo C. Chung. Both of the above mentioned HOWTO's
cover the details of getting a sound system working under Linux far
better than I could.
8.1. Setting up for Analogue Audio Capture.
Firstly, set up your audio. There are a multitude of ways to route
audio before it gets to your Linux box, some common ones are:
Line out to Line in. Most audio devices have a Line output sockets.
Line level is a standard that specifies what voltage and current the
audio device will send out. If I remember correctly it is 500mA for
domestic and Semi Pro devices, and 750mA for Pro audio devices. I
would guess that the standard set for most soundcards will be 500mA,
but some of the newer Pro audio may be to the higher standard It
shouldn't make too much difference unless you are recording at very
high levels.
The Line level output is normally used to connect HI-FI equipment to
an amplifier, so things such as Tape Decks, Radio Tuners, CD players,
DAT machines and Mini-Disc players should connect without problem.
Turntables can be more of a problem, see below for more information.
You could capture audio from VCR's as well. Most VCR's will either
have Line out for sound, or you can Get a Line out from a SCART socket
if your VCR has one.
Amplifier Tape out to Line in, Line out to Amplifier Tape in. This
configuration is essentially replacing a traditional tape recorder
connected to your HI-FI amplifier with your Linux system. The Line
out to Tape in allows monitoring of the recording levels.
Mike to Mike in. The voltages generated by microphones is very much
smaller than those used in Line level devices. If you were to plug a
Microphone into the Line in, chances are you would never record
anything.
WARNING, doing the reverse, plugging a Line level device into the
Microphone input, can damage your soundcard!!
Turntable to Mike in. Sadly I've no information on this at the
moment. If I remember correctly the turntable should be connected to
the Microphone in, it uses a similar mechanism to record sound and has
similar low voltages.
Music keyboards & synths should be connected to Line in, with guitars
connecting to Line in via a DI (Direct Injection, used to convert the
signal to Line level) box.
Before you plug in anything into your soundcard, make sure the volume
levels are turned down to minimum, or if using microphones they are
either turned off or away from speakers.
8.2. Setting up for CD-ROM Audio Capture.
Setting up your Linux system to extract audio data from CD-ROM is
reasonably straight forward.
If you can hear a track playing from your CD-ROM through your speakers
or amplifier, connected to your soundcard, then there's a reasonable
chance you should be able to record from it.
8.3. Additional Setting up.
Log in as per normal to your system, then using a mixer program set
the recording levels that are loud enough to give you a decent
recording level, but aren't too loud and distorting. I normally just
judge this by ear, after a while you'll get to know what levels are
best for your kit.
I recommend either turning off all unnecessary services or switching
to the single user runlevel, especially when encoding from an audio
source. This is to ensure that the bare minimum of services are
running and thus minimising system glitches when recording.
I've set up a separate SCSI drive, exclusively to record the audio to,
which I'll refer to as /mnt/mp3. I've done this mainly for the
performance gains in using a SCSI drive. Also, recording onto a
dedicated drive, where you are almost certain the head isn't going to
suddenly skip to another part of the drive as you are writing audio
data to it, is a good thing :)
For details on setting up a Linux system with multiple disk drives, a
good read of the Multi-Disk-HOWTO, by Stein Gjoen may be useful.
9. Encoding from Audio.
Firstly, make sure you have enough space on your drive. At CD
quality, 44.1 Khz 16 Bit stereo, 1 minute takes nearly 5 Mb.
I normally record at DAT quality, which is 48 Khz 16 Bit stereo.
Using wavrec I use the following syntax:
/usr/local/bin/wavrec -t 60 -s 48000 -S /mnt/mp3/temp.wav
The first part is an explicit path to wavrec. The '-t 60' specifies
the length of time to record for, in seconds.
The third option, -s 48000 refers to the sample rate in bits/sec.
(48000 is the rate for DAT, 44100 is CD)
The last option is the path to the output file.
To see the full set of options, run waverec -help, or see it's man
page.
This will produce your WAV file Next you will need to encode it into
MP3 format.
Use bladdenc with the following command line.
/usr/local/bin/bladeenc [source file] [destination file] -br 256000
The -br option sets the bit rate, in this case I've set the rate to
the maximum rate of 256k bits/s. The path to bladeenc may also be
different on your system to the one I've used in my example.
To see the full set of options, run bladeenc -help, actually this is
an invalid option, but will display the list of options.
10. Encoding from CD-ROM.
Again, check you will have enough drive space on your system.
I've written a very simple Perl script that will rip and encode tracks
from a CD.
______________________________________________________________________
#!/usr/bin/perl
if ($ARGV[0] ne "") {
$count = 1;
do {
$cdcap = system("cdparanoia", $count, "/mnt/mp3/tmp/cdda.wav");
$track = "$ARGV[1]/track".$count.".mp3";
$benc = system("bladeenc /tmp/cdda.wav $track -br 256000");
$count++;
}
until $count > $ARGV[0];
exit;
}
else {
print "Usage cdriper [no of tracks] [destination directory]\n\n";
}
______________________________________________________________________
The main lines of interest are
$cdcap = system("cdparanoia", $count, "/mnt/mp3/tmp/cdda.wav");
This line calls the CD ripper, cdparanoia. Cdparanoia converts raw CD
audio data to WAV format. The salient options are $count, which is
the number of tracks to rip, and then the path for the outputted WAV
file. In my example this will go to a tmp directory on my MP3 SCSI
drive.
The WAV file is then converted into a MP3 file using Bladeenc.
I've written this Perl script in order to rip a CD without having to
rip and encode each track, and without having to use the batch mode of
Cdparanoia. This cuts down on free disk space needed as Cdparanoia's
batch mode will rip the whole disk, and take up anything upto 600 Meg.
Please note: The above script is very basic and has nothing fancy,
like error checking. Improve at your leisure :)
11. Playing MP3's.
So, hopefully, you should now have some MP3 files ready to play.
The two most popular MP3 players for Linux are Xaudio, and Xmms
(formerly known as X11Amp).
Links to the homepages of both players can be found in section 7.
I've based this HOWTO around my use of xaudio, primarily because I can
use it with or without being in X.
The program is shareware.
Xaudio is a suite of programs, of most interest to us are xaudio and
mxaudio.
After installing the files onto your system, you have the choice or
running either the command line version, xaudio, or the X version
mxaudio.
Mxaudio has a nice interface, and is straightforward to use.
Xaudio's options can be viewed by running the program with the -help
option (xaudio -h).
To play a track try xaudio track.mp3
To play a whole directory, xaudio *.mp3
Both programs have README files.
12. Feedback.
New hardware and software is being released all the time. If you are
using newer versions of the hardware and / or software listed within
this document, or can add to anything within this area, please send
your information for inclusion to phil@websentric.com and I'll include
it in the next release.
Happy MP3'ing!!