In real-time mp3 opnemen

ArticleCategory: [Artikel Kategorie]

Applications

AuthorImage:[Bild des Autors]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Philip de Groot

AboutTheAuthor:[Über den Autor]

Promoveert binnenkort aan de Universiteit van Nijmegen op het onderwerp chemometrie. Werkt zeer graag met Linux en schrijft regelmatig zijn ervaringen hiermee op.

Abstract:[Zusammenfassung]

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.

ArticleIllustration:[Titelbild des Artikels]

[Illustration]

ArticleBody:[Der eigentliche Artikel]

Inleiding

Normaal gesproken is het niet mogelijk om wave-geluid in real-time te converteren naar mp3-geluid. De procedure is:
  • Neem eerst een wave-bestand op m.b.v. een recorder.
  • Gebruik een mp3 encoder (bijvoorbeeld 'Lame') om het wave bestand te converteren naar mp3.

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 Loostad radio). 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.

De procedure

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

'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!

Hoe werkt mpegrec

'Mpegrec' werkt heel eenvoudig. Type in een xterm 'mpegrec -b 128 -o ./test.mp3' en daar ga je! Verklaring van de opties:
-b 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.
-o 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...

Let op:
Zorg ervoor dat de mixer-instellingen 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.

Hoe werkt 'sox | lame'

Type in een xterm de volgende opdracht in:
sox -t ossdsp -w -s -r 44100 -c 2 /dev/dsp -t raw - | lame -x -m s - ./test.mp3
Verklaring van de meegeven opties:
sox Het opneemprogramma: geluid wordt via de 'line-in' van de geluidskaart opgenomen.
-t ossdsp 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.
-w Sample bit type is 16 bit long word (als U dit niet begrijpt: laat maar, niet belangrijk).
-s De 'sample data' is 'signed linear' (als U dit niet begrijpt: laat maar, niet belangrijk).
-r 44100 De sampling frequentie is 44100 Hz (CD-kwaliteit).
-c 2 Twee kanalen opnemen (stereo).
/dev/dsp 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 >test.wav' (mits de mixer goed ingesteld staat!!!).
-t raw De uitvoerdata is 'ruwe' data (ongewijzigd; zo van de geluidskaart).
- Gebruik de standaarduitvoer, gesymboliseerd door '-'.
lame Het encoder programma: het opgenomen geluid wordt door de '|' doorgesluisd naar 'lame' om het naar mp3 te converteren.
-x '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!).
-m s 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.
- Invoer is 'stdin'. Dat klopt dus in deze situatie.
./test.mp3 De file waar het eindresultaat in komt te staan.

De mixer

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:
De standaard mixer instellingen
Figuur 1: de standaard KDE mixer instellingen.

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:

De juiste bron selecteren
Figuur 2: de juiste bron selecteren.

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!

Let op:

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!

De KDE-mixer staat nu goed ingesteld
Figuur 3: de KDE mixer staat nu goed ingesteld.

Extra maatregelen om goed op te kunnen nemen

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:

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

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

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):

alias char-major-14 sb
pre-install sb /sbin/modprobe "-k" "adlib_card"
pre-install sb /sbin/modprobe "-k" "awe_wave"
options sb io=0x220 irq=5 dma=1 dma16=5 # mpu_io=0x330
options adlib_card io=0x388 # FM synthesizer
post-install sb /usr/bin/sfxload "/win98/Program Files/Creative/ctsnd/sfbank/synthgs.sbk"
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.


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.

De tekst-georienteerde mixer 'aumix'
Figuur 4: De tekst-georienteerde mixer 'aumix'.

Met de pijltjestoetsen kunt U de verschillende bronnen selecteren. Met de '<' of '>' 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'.


Om het bovenstaande te automatiseren heb ik zelf een scriptje aangemaakt: './mrec'. Dit script ziet er als volgt uit:

#!/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"

Geluid wordt geladen, 'line-in' wordt als opnamebron geselecteerd en 'mpegrec' begint meteen met opnemen'

Mpegrec installeren

De 'mpegrec' software die in dit artikel is besproken, staat hier ter beschikking. Meer informatie over 'mpegrec' vindt U op http://www.netwaysglobal.com/mpegrec/. Alleen de source-bestanden en de gecompileerde win32 versies vind U hier. Een pagina met meer informatie bestaat eigenlijk niet, al kunt u hier meer informatie vinden.

De 'lame'-files en installatietips vindt U hier.

Installatie onder Linux


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.

Lame installeren

De versie van 'lame' die in dit artikel is besproken staat ook ter beschikking voor download. De homepage van 'lame' staat op http://www.mp3dev.org/mp3/.

Installatie onder Linux

Sox installeren

'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 >hier< en de homepage vindt U op http://home.sprynet.com/~cbagwell/sox.html.

Installatie onder Linux

Overige problemen

Ik ondervond nog twee overige problemen:

Cron

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:

mv /usr/sbin/cron /usr/sbin/cron.backup

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

which cron

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.

Probleem met geluidsdrivers

Dit probleem heb ik opgelost door de alternatieve Alsa geluidsdrivers 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.