<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META name="generator" content="HTML Tidy, see www.w3.org">
<TITLE></TITLE>
</HEAD>
<BODY>
<H1>In real-time mp3 opnemen</H1>

<H4>ArticleCategory: [Artikel Kategorie]</H4>

Applications 

<H4>AuthorImage:[Bild des Autors]</H4>

<IMG src="../../common/images/PhilipGroot.jpg" alt="[Photo of the Author]" height="102" width=
"79"> 

<H4>TranslationInfo:[Author and translation history]</H4>

<P>original in en <A href="mailto:philipg@authors.linuxfocus.org">Philip de
Groot</A></P>

<H4>AboutTheAuthor:[&Uuml;ber den Autor]</H4>

<P>Promoveert binnenkort aan de <A href=
"http://www.sci.kun.nl/cac/people/philipg/index.html">Universiteit van Nijmegen</A> op het
onderwerp <A href=
"http://www.sci.kun.nl/cac/index.html">chemometrie</A>. Werkt zeer graag met Linux en schrijft
regelmatig zijn ervaringen hiermee op.</P>

<H4>Abstract:[Zusammenfassung]</H4>

Dit artikel gaat over het opnemen van muziek. Maar in tegenstelling tot
de LinuxFocus tip van Januari 2001, niet in het dure WAV formaat, maar
direct in het veel kleinere MP3 formaat. Hierdoor is het mogelijk om
tot 24 uur muziek op te nemen met CD kwaliteit. 

<H4>ArticleIllustration:[Titelbild des Artikels]</H4>

<IMG src="../../common/images/article178/image_art178.jpg" alt="[Illustration]" hspace="10" height=
"100" width="200"> 

<H4>ArticleBody:[Der eigentliche Artikel]</H4>

<table summary="Introduction as one block" border=0>
<tr><td>
<H3>Inleiding</H3>

Normaal gesproken is het niet mogelijk om wave-geluid in real-time te
converteren naar mp3-geluid. De procedure is:<BR>
<UL class="noindent">
<LI>Neem eerst een wave-bestand op m.b.v. een recorder.</LI>

<LI>Gebruik een mp3 encoder (bijvoorbeeld 'Lame') om het wave bestand
te converteren naar mp3.</LI>
</UL>

<P>Omdat een wave bestand erg snel ontzettend groot wordt (100 MB voor
10 minuten stereo muziek in CD kwaliteit), is de opslagcapaciteit voor
dit type geluid vaak beperkt. Een mp3-encoder kan een wavebestand van
100 MB reduceren tot 10 MB met de standaard mp3-kwaliteit (128 kbps,
stereo). Dit opent de mogelijkheid om bijvoorbeeld 24 uur digitale muziek zonder
onderbrekingen op te nemen! 24 uur is 60*24 = 1440 minuten, dus 1,4 GB
(1440 MB) harde schijf ruimte!!! Dit laatste heb ik gedaan om de top
300 van de jaren 80 op te nemen (uitgezonden door <A href=
"http://www.loostadradio.nl">Loostad radio</A>). Op een onderbreking na
(het opneemprogramma stopt automatisch na 24 uur en daar kwam ik vrij
laat achter...) is dit succesvol verlopen! Op deze pagina geef ik aan
welke software ik ervoor heb gebruikt, hoe het eventueel anders kan en
stel ik de software beschikbaar voor download.</P>
</td></tr>
</table>

<H3>De procedure</H3>

Met de onderstaande twee methodes kan je muziek in stereo CD-kwaliteit
in real-time als mp3 opnemen: 

<UL class="noindent">
<LI>Met het software programma <A href="#mpegrec">'mpegrec'</A>
(vereist de mp3-encoder <A href="#lame">'Lame'</A>).</LI>

<LI>Met een opneemprogramma, bijvoorbeeld <A href=
"#sox">'sox'</A>, waarvan je de uitvoer doorsluist naar een
mp3-encoder ('sox | lame').</LI>
</UL>

<P>'Mpegrec' doet hetzelfde als 'sox | lame', maar allerlei
instellingen zijn al 'voorgeprogrammeerd'. De gebruiker heeft er verder
eigenlijk geen omkijken meer na, MITS ook 'Lame' is geinstalleerd! Ik
raad het gebruik van 'mpegrec' ten zeerste aan. Houdt U er wel rekening
mee, dat dit programma automatisch na 24 uur stopt!!! Bovendien bevat de software een vervelende casting-bug. De door de gebruiker opgegeven opname-tijd wordt niet correct gebruikt. Vaak is het veel korter!</P>

<H3>Hoe werkt mpegrec</H3>

'Mpegrec' werkt heel eenvoudig. Type in een xterm <STRONG>'mpegrec -b
128 -o ./test.mp3'</STRONG> en daar ga je! Verklaring van de
opties:<BR>
<TABLE>
<TR>
<TD valign="top">-b</TD>
<TD>Gebruik 128 kbps als mp3 bitrate. De standaardwaarde in 'mpegrec'
is 192, wat eigenlijk een vreemde (en veel te hoge) waarde is. Bijna
alle mp3-bestanden hebben een constante bitrate van 128 kbps.</TD>
</TR>

<TR>
<TD valign="top">-o</TD>
<TD>Naam van de uitvoerfile. In dit geval dus ./test.mp3. Als U geen
naam opgeeft, gaat alles naar de standaarduitvoer ('stdout'). Meestal
is dit de xterm waarin U het programma opstart. Staan alle mp3-codes op
Uw beeldscherm i.p.v. in een bestand...</TD>
</TR>
</TABLE>

<P><STRONG>Let op:</STRONG><BR>
Zorg ervoor dat de <A href="#mixer">mixer-instellingen</A> goed
staan, anders neemt U nog niets op! Ik bedoel daarmee dat U de juiste
opnamebron hebt geselecteerd en ook de volumeregelaars helemaal open
hebt gezet.</P>

<H3>Hoe werkt 'sox | lame'</H3>

Type in een xterm de volgende opdracht in: 

<DIV style="margin-left: 2em"><STRONG>sox -t ossdsp -w -s -r 44100 -c 2
/dev/dsp -t raw - | lame -x -m s - ./test.mp3</STRONG></DIV>

Verklaring van de meegeven opties:<BR>
<TABLE>
<TR>
<TD valign="top" width="100">sox</TD>
<TD>Het opneemprogramma: geluid wordt via de 'line-in' van de
geluidskaart opgenomen.</TD>
</TR>

<TR>
<TD valign="top" width="100">-t ossdsp</TD>
<TD>Dit geeft aan dat de invoer van de OSS-geluidsdriver komt. Dit is
de geluidsdriver die standaard bij de kernel zit als je geluid
meecompileert.</TD>
</TR>

<TR>
<TD valign="top" width="100">-w</TD>
<TD>Sample bit type is 16 bit long word (als U dit niet begrijpt: laat
maar, niet belangrijk).</TD>
</TR>

<TR>
<TD valign="top" width="100">-s</TD>
<TD>De 'sample data' is 'signed linear' (als U dit niet begrijpt: laat
maar, niet belangrijk).</TD>
</TR>

<TR>
<TD valign="top" width="100">-r 44100</TD>
<TD>De sampling frequentie is 44100 Hz (CD-kwaliteit).</TD>
</TR>

<TR>
<TD valign="top" width="100">-c 2</TD>
<TD>Twee kanalen opnemen (stereo).</TD>
</TR>

<TR>
<TD valign="top" width="100">/dev/dsp</TD>
<TD>Dit is het opneem-device: het linux-apparaat waar de opnamedata
vandaan komt. Alle apparaten, poorten, schijven, enzovoorts worden
onder Linux benaderd via de '/dev'-directory. De wave-data wordt onder
Linux dus benaderd als '/dev/dsp'. Sterker nog: i.p.v. 'sox' kan je ook
een wave-file als volgt krijgen: 'cat /dev/dsp &gt;test.wav' (mits de
mixer goed ingesteld staat!!!).</TD>
</TR>

<TR>
<TD valign="top" width="100">-t raw</TD>
<TD>De uitvoerdata is 'ruwe' data (ongewijzigd; zo van de
geluidskaart).</TD>
</TR>

<TR>
<TD valign="top" width="100">-</TD>
<TD>Gebruik de standaarduitvoer, gesymboliseerd door '-'.</TD>
</TR>

<TR>
<TD valign="top" width="100">lame</TD>
<TD>Het encoder programma: het opgenomen geluid wordt door de '|'
doorgesluisd naar 'lame' om het naar mp3 te converteren.</TD>
</TR>

<TR>
<TD valign="top" width="100">-x</TD>
<TD>'Force byte-swapping of input'. Wat dit precies doet weet ik niet,
maar zonder deze optie werkt het eenvoudigweg niet (voordat ik daar
achter was!).</TD>
</TR>

<TR>
<TD valign="top" width="100">-m s</TD>
<TD>Encodeer als stereo mp3-file. Standaard encodeert 'lame' het als
'joint-stereo': alleen de VERSCHILLEN tussen beide kanalen wordt
ge-encodeerd. Het resultaat is een hogere compressie, maar een mindere
kwaliteit van de mp3-file.</TD>
</TR>

<TR>
<TD valign="top" width="100">-</TD>
<TD>Invoer is 'stdin'. Dat klopt dus in deze situatie.</TD>
</TR>

<TR>
<TD valign="top" width="100">./test.mp3</TD>
<TD>De file waar het eindresultaat in komt te staan.</TD>
</TR>
</TABLE>

<H3><A name="mixer"></A>De mixer</H3>

Een juiste instelling van de mixer is uiterst belangrijk. De mixer
bepaalt vanaf welke bron wordt opgenomen. Standaard staat bij mij de
KDE-mixer ('kmix') als volgt ingesteld:<BR>
 

<CENTER><IMG src="../../common/images/article178/mixer-bad.jpg" alt=
"De standaard mixer instellingen" align="middle"><BR>
<EM><STRONG>Figuur 1: de standaard KDE mixer
instellingen.</STRONG></EM></CENTER>

<P>Zoals U ziet is de microfoon de huidige opnamebron. Aangezien een
externe bron via de 'line-in' op de geluidskaart aangesloten is,
moet ik dus van de 'line-in' de opnamebron maken. Dat doe ik door op de
'line-in' te gaan staan in de mixer en de rechtermuisknop eenmaal in te
drukken. Het submenuutje van Figuur 2 komt dan te voorschijn:<BR>
</P>

<CENTER><IMG src="../../common/images/article178/mixer-bron.jpg" alt=
"De juiste bron selecteren" align="middle"><BR>
<EM><STRONG>Figuur 2: de juiste bron selecteren.</STRONG></EM><BR>
<BR>
</CENTER>

<P>Natuurlijk selecteert U 'RecSource'. De 'line-in' van Uw
geluidskaart staat nu ingesteld als opnamebron. Zet op dezelfde manier
ook meteen de microfoon UIT als opnamebron: de extra ruis wilt U echt
niet hebben!</P>

<H3>Let op:</H3>

Als U de 'line-in' niet als bron selecteert, neemt de geluidskaart niet
op vanaf de 'line-in' (ook al hoort U het echt via de 'line-in')!!!
Vergeet niet dat de 'line-in' op 'unmute' moet staan. Zoals het in
Figuur 2 staat aangegeven is het goed: U kunt de 'line-in' op mute
zetten, dus staat hij op unmute. N.B. 'Mute' is Engels voor
onderdrukken, dus het geluid niet meer laten horen! 

<CENTER>
<P><IMG src="../../common/images/article178/mixer-good.jpg" alt=
"De KDE-mixer staat nu goed ingesteld" align="middle"><BR>
<EM><STRONG>Figuur 3: de KDE mixer staat nu goed
ingesteld.</STRONG></EM></P>
</CENTER>

<H3>Extra maatregelen om goed op te kunnen nemen</H3>

Waarschijnlijk werkt U standaard in een XWindows omgeving en wilt U
'mpegrec' ook onder XWindows uitvoeren. Dit is echter geen goed idee om
twee redenen:<BR>
<UL class="noindent">
<LI>XWindows is behoorlijk veeleisend. Geluid opnemen en encoderen naar
mp3 is ook behoorlijk processor intensief. Onder XWindows kan dit
leiden tot verstoringen in het opgenomen signaal.</LI>

<LI>Als U in real-time muziek opneemt, is het niet verstandig om de
computer andere taken uit te laten voeren. XWindows hebt U dan
eigenlijk niet nodig.</LI>
</UL>

<P>Bovenstaande pleit dus voor het opnemen onder een soort DOS-prompt
(de Bash-shell onder Linux). Dit heeft een aantal gevolgen:<BR>
</P>

<UL class="noindent">
<LI>U moet geluidsondersteuning vanaf de prompt hebben. Vaak wordt
geluidsondersteuning pas geladen als U XWindows opstart.</LI>

<LI>U hebt een mixer nodig die gewoon onder 'Bash' werkt (dus onder
tekstmodus).</LI>
</UL>

<P>Gelukkig kunnen bovenstaande problemen vrij makkelijk opgelost
worden. Het eerste probleem, de geluidsondersteuning, los ik als volgt
op:<BR>
<STRONG>'modprobe -k sb'</STRONG></P>

<P>Met deze opdracht wordt de module 'sb' geladen, waardoor mijn
geluidskaart (een SoundBlaster AWE 64) geinstalleerd wordt onder Linux.
Als U niet weet, hoe Uw geluidskaart onder Linux heet, kijk dan in
'/etc/conf.modules' (SuSE) of '/etc/modules.conf' (hangt van Uw Linux
distributie af). Bij mij ziet het er als volgt uit (heb ik zelf ooit
eens voor elkaar gebokst):</P>

<DIV style="margin-left: 2em">alias char-major-14 sb<BR>
pre-install sb /sbin/modprobe "-k" "adlib_card"<BR>
pre-install sb /sbin/modprobe "-k" "awe_wave"<BR>
options sb io=0x220 irq=5 dma=1 dma16=5 # mpu_io=0x330<BR>
options adlib_card io=0x388 # FM synthesizer<BR>
post-install sb /usr/bin/sfxload "/win98/Program Files/Creative/ctsnd/sfbank/synthgs.sbk"</DIV>

Uw geluidskaart vindt U altijd onder 'alias char-major-14' (mits U de
standaard Linux kernel OSS-drivers gebruikt. Dat is doorgaans ALTIJD het
geval). Achter deze regel staat 'sb', dus weet ik dat ik met 'modprobe
-k sb' mijn geluidskaart in de lucht krijg. 

<P><BR>
 Het tweede probleem is het selecteren van de 'line-in' m.b.v. een
tekst-georienteerd mixer-programma. Ik gebruik hiervoor het programma
'aumix'. Als U in Bash alleen 'aumix' intypt, start de mixer op in
interactieve modus. Dit is handig om Uw instellingen snel te overzien
en aan te passen, zie Figuur 4.<BR>
</P>

<CENTER><IMG src="../../common/images/article178/aumix.jpg" alt=
"De tekst-georienteerde mixer 'aumix'" align="middle"><BR>
<EM><STRONG>Figuur 4: De tekst-georienteerde mixer
'aumix'.</STRONG></EM><BR>
<BR>
</CENTER>

<P>Met de pijltjestoetsen kunt U de verschillende bronnen selecteren.
Met de '&lt;' of '&gt;' toetsen selecteer ik het volume (links) of de
balans (rechts). Met de '+' of '-' kunt U de volume van de huidige
geselecteerde bron laten toe- of afnemen. Met 'm' kunt U de huidige
bron 'muten of unmuten' (selecteren/deselecteren als opnamebron). Als
de huidige bron ook de opnamebron is, staat links naast de
volumeregelaar een rode R (Record). als U de bron alleen kunt gebruiken
om af te luisteren, staat er een groene 'P' (Playback). Als U op 's'
drukt, worden de huidige instellingen bewaard in de file '~/.aumixrc'.
De volgende keer kunt U deze instellingen weer heel makkelijk activeren
met de opdracht: 'aumix -l'.</P>

<P><BR>
 Om het bovenstaande te automatiseren heb ik zelf een scriptje
aangemaakt: './mrec'. Dit script ziet er als volgt uit:<BR>
<pre>
#!/bin/sh
if [ -z "$1" ]; then
	echo "Usage: mrec mp3-output-file"
	exit 0
fi
modprobe -k sb
aumix -l
mpegrec -b 128 -o "$1"
</pre>
<BR>
Geluid wordt geladen, 'line-in' wordt als opnamebron geselecteerd en
'mpegrec' begint meteen met opnemen'</P>

<H3><A name="mpegrec"></A>Mpegrec installeren</H3>

De 'mpegrec' software die in dit artikel is besproken, staat <A href="../../common/src/article178/index.html">hier</A> ter beschikking.
Meer informatie over 'mpegrec' vindt U op <A href=
"http://www.netwaysglobal.com/mpegrec/">http://www.netwaysglobal.com/mpegrec/</A>.
Alleen de source-bestanden en de gecompileerde win32 versies vind U
hier. Een pagina met meer informatie bestaat eigenlijk niet, al kunt u
<A href="http://www.icewalk.com/softlib/app/app_00930.html">hier</A>
meer informatie vinden. 

<P>De 'lame'-files en installatietips vindt U <A href=
"#lame">hier</A>.</P>

<H4>Installatie onder Linux</H4>

<UL>
<LI>Kopieer het ingepakte bestand in bijvoorbeeld de '/usr/local'
directory.</LI>

<LI>Pak het bestand uit: 

<UL>
<LI><STRONG>gunzip mpegrec-1.0.src.tar.gz</STRONG></LI>

<LI><STRONG>tar -xvf mpegrec-1.0.src.tar</STRONG></LI>
</UL>
</LI>

<LI>type 'cd mpegrec-1.0'</LI>

<LI>type 'make'. Het programma wordt nu gecompileerd.</LI>

<LI>type 'make install'. Het programma wordt nu geinstalleerd en is
meteen klaar voor gebruik.</LI>
</UL>

<P><BR>
 N.B.: De installatie onder Windows behandel ik niet, maar U hebt wel
de Windows versie van 'lame' nodig!!! Ik stel de windows versie van 'mpegrec' beschikbaar als
download voor de liefhebbers. Er is trouwens wel heel goede
documentatie in de .tar.gz-file (winzip) bijgesloten. De homepage-link
helpt u wellicht ook verder.</P>

<H3><A name="lame"></A>Lame installeren</H3>
De versie van 'lame' die in dit artikel is besproken staat ook ter <A href="../../common/src/article178/index.html">beschikking voor download</A>.
De homepage van 'lame' staat op <A href=
"http://www.mp3dev.org/mp3/">http://www.mp3dev.org/mp3/</A>.

<H4>Installatie onder Linux</H4>

<UL>
<LI>Kopieer het ingepakte bestand in bijvoorbeeld de '/usr/local'
directory.</LI>

<LI>Pak het bestand uit: 

<UL>
<LI><STRONG>gunzip lame3.70.tar.gz</STRONG></LI>

<LI><STRONG>tar -xvf lame3.70.tar</STRONG></LI>
</UL>
</LI>

<LI>type 'cd lame-3.70'</LI>

<LI>Edit de 'Makefile' naar Uw behoeften. Dit houdt in dat U
waarschijnlijk de volgende regels wilt wijzigen: 

<DIV style="margin-left: 2em"># remove these lines if you dont have
GTK, or dont want the GTK frame analyzer<BR>
 GTK = -DHAVEGTK `gtk-config --cflags`<BR>
 GTKLIBS = `gtk-config --libs`<BR>
# Comment out next 2 lines if you want to remove VBR histogram
capability<BR>
 BRHIST_SWITCH = -DBRHIST<BR>
 LIBTERMCAP = -lncurses 

<P>Zet voor de regels waar geen '#' staat alsnog een '#'. Deze extra
opties hebt U beslist niet nodig!</P>
</DIV>
</LI>

<LI>type 'make' om 'lame' te compileren. Wellicht moet U in de
/bin-directory een symbolic-link maken naar /usr/local/lame-3.70/lame
om 'lame' overal op te kunnen starten. 'lame' is nu klaar voor
gebruik.</LI>
</UL>

<H3><A name="sox"></A>Sox installeren</H3>

'Sox' is een programma waarmee muziekbestanden kunnen worden opgenomen,
geconverteerd of bewerkt. De bewerkingen zijn bijvoorbeeld het
toevoegen van echo's en dergelijke. Zie de man-page van 'sox' ('man
sox') voor meer informatie. De conversies die 'sox' kan uitvoeren is
bijvoorbeeld een .wav-file omzetten naar een .au-file (het standaard
SUN geluidsformaat) en andersom. Kan soms heel erg handig zijn! De
versie van 'sox' die ik voor download beschikbaar stel staat  <A href="../../common/src/article178/index.html">&gt;hier&lt;</A> en de homepage vindt U
op <A href=
"http://home.sprynet.com/~cbagwell/sox.html">http://home.sprynet.com/~cbagwell/sox.html</A>.


<H4>Installatie onder Linux</H4>

<UL>
<LI>Kopieer het ingepakte bestand in bijvoorbeeld de '/usr/local'
directory.</LI>

<LI>Pak het bestand uit: 

<UL>
<LI><STRONG>gunzip sox-12.17.tar.gz</STRONG></LI>

<LI><STRONG>tar -xvf sox-12.17.tar</STRONG></LI>
</UL>
</LI>

<LI>type 'cd sox-12.17'</LI>

<LI>type './configure'. Allerlei settings worden opgezocht en het
'Makefile' bestand wordt aangemaakt; specifiek aangepast voor Uw
systeem!</LI>

<LI>type 'make'. 'Sox' wordt gecompileerd.</LI>

<LI>type 'make install' om 'sox' te installeren. 'Sox' is nu klaar voor
gebruik.</LI>
</UL>

<H3>Overige problemen</H3>

Ik ondervond nog twee overige problemen: 

<UL class="noindent">
<LI>'cron' start een zwaar 'find'-proces op die de mp3-opname
verstoort.</LI>

<LI>De standaard OSS kernel geluidsdrivers leverde bij mij problemen
op. In de mp3-file zit stukken irritante ruis (pijnlijk voor de oren). Nader onderzoek wees
uit dat de ruis ook in de wave-file zat, ongeacht het programma waarmee de wave-file is opgenomen. Het is dus geen mp3-encoder
('lame') probleem.</LI>
</UL>

<H4>Cron</H4>

Dit is een probleem onder SuSE in het algemeen. Er wordt een zwaar
proces opgestart om 'man-pages' bij te werken en verouderde
log-bestanden te verwijderen. Op zich een uiterst nuttige taak, maar
het kost veel te veel processorkracht. Ik heb 'cron' eenvoudigweg een
andere naam gegeven tijdens het opnemen. Daarna heb ik 'cron' weer
hernoemt naar de originele naam! Type in een xterm de volgende opdracht
om de naam van 'cron' te wijzigen: 

<P><STRONG>mv /usr/sbin/cron /usr/sbin/cron.backup</STRONG></P>

<P>Uiteraard staat 'cron' bij andere distributies eventueel in een
andere directory. Met de opdracht:</P>

<P><STRONG>which cron</STRONG></P>

<P>kunt U achterhalen waar 'cron' geinstalleerd staat. Let U wel goed
op dat 'cron' niet andere taken moet uitvoeren! Op een Linux machine
voor persoonlijk gebruik kan het geen kwaad.</P>

<H4>Probleem met geluidsdrivers</H4>

Dit probleem heb ik opgelost door de alternatieve <A href=
"http://www.alsa-project.org">Alsa geluidsdrivers</A> te gebruiken. Gebruik de Alsa documentatie (niet bijgesloten bij de drivers en utilities) om de drivers goed te installeren. Gebruik de Alsa drivers niet, tenzij dit door problemen echt noodzakelijk is.
</BODY>
</HTML>