In real-time mp3 opnemen

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 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:
  • Met het software programma 'mpegrec' (vereist de mp3-encoder 'Lame').
  • Met een opneemprogramma, bijvoorbeeld 'sox', waarvan je de uitvoer doorsluist naar een mp3-encoder ('sox | lame').

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

    Hoe werkt mpegrec

    'Mpegrec' werkt heel eenvoudig. Type in een xterm:

    en daar ga je! Verklaring van de opties:
    -bGebruik 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.
    -oNaam 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: Verklaring van de meegeven opties:
    soxHet opneemprogramma: geluid wordt via de 'line-in' van de geluidskaart opgenomen.
    -t ossdspDit geeft aan dat de invoer van de OSS-geluidsdriver komt. Dit is de geluidsdriver die standaard bij de kernel zit als je geluid meecompileert.
    -wsample bit type is 16 bit long word (als U dit niet begrijpt: laat maar, niet belangrijk).
    -sDe 'sample data' is 'signed linear' (als U dit niet begrijpt: laat maar, niet belangrijk).
    -r 44100De sampling frequentie is 44100 Hz (CD-kwaliteit).
    -c 2Twee kanalen opnemen (stereo).
    /dev/dspDit 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 rawDe uitvoerdata is 'ruwe' data (ongewijzigd; zo van de geluidskaart).
    -Gebruik de standaarduitvoer, gesymboliseerd door '-'
    lamehet 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 sEncodeer 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.mp3De 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 opnamebron 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 juiste bron selecteren
    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:

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

    Uw geluidskaart vindt U altijd onder 'alias char-major-14' (mits U de standaard Linux kernel OSS-drives 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 juiste mixer m.b.v. een tekst-georienteerd mixer-programma. Ik gebruik hiervoor het programma 'aumix'. Als U in een xterm 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'.

    Als 'aumix' momenteel niet geinstalleerd staat, moet U deze mixer even installeren vanaf de CD. Onder SuSE staat de mixer in de /snd directory op de installatie CD (uiteraard via yast).


    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

    U kunt een Windows en een Linux versie (van Linux alleen de source code) van 'mpegrec' downloaden via de website van de originele auteur: http://www.netwaysglobal.com/mpegrec/. 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!!! Er is trouwens wel heel goede documentatie in de .tar.gz-file (winzip) bijgesloten. De homepage-link helpt u wellicht ook verder.


    Lame installeren

    Ook van 'lame' zijn windows en Linux versies beschikbaar, maar die staan niet online op de lame-homepage vanwege juridische kwesties. De broncode kan niet gebruikt worden om mp3-bestanden te maken, terwijl de gecompileerde code dat wel kan. De homepage van 'lame' staat op http://lame.sourceforge.net/. Merk op dat de huidige installatiebeschrijving van toepassing is op (de sterk verouderde) lame versie 3.70.

    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 homepage van 'sox' vindt U op http://sox.sourceforge.net/. Ook nu geldt weer dat de beschreven installatieprocedure van toepassing is op een verouderde versie van 'sox'.

    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 hernoemd naar de originele naam! Type in een xterm de volgende opdracht om de naam van 'cron' te wijzigen:

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

    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. Vanaf SuSE 7.0 (of eerder?) worden standaard de Alsa drivers gebruikt voor de geluidsondersteuning. Deze drivers werken stukken beter dan de OSS-drivers en het gebruik daarvan kan ik aanbevelen. Let op: als U besluit de Alsa drivers te downloaden van de website, bedenk dan dat U alleen de drivers, libraries of utilities krijgt (moet U alle drie apart downloaden). De documentatie is niet bijbegrepen en moet U ook apart downloaden!
    Terug naar de hoofdpagina
    Lees of teken in mijn gastenboek
    Stuur een email naar: philipg@philipg.nl

    Gewoon een individuele pagina teller:

    Last modified: Mon Feb 28 21:24:29 CEST 2005