Jak nahrát zvuk z jakéhokoliv programu

1. 6. 2010 12:57 (aktualizováno) Jan Kulhánek

Po delší době jsem měl volný den a tak jsem se rozhodl vrátit se ke svému koníčku a složit si nějakou tu muziku. Vše šlo jako po másle (nápad jsem měl v rukávě, použil jsem Rosegarden a nějaké softwarové syntezátory) až do chvíle, kdy jsem potřeboval vygenerovat výsledný wav, případně mp3 soubor.

Vzpoměl jsem si, že existuje utilitka arecord, spouští se z příkazového řádku a dělá přesně to, že zvukový výstup, který jde do reproduktorů, ukládá ve zvoleném formátu a kvalitě dosouboru. Jde o prográmek z balíku utilit pro alsu, určitě je ve zdrojích Ubuntu (sand i jinde).

1. Základní použití

Základní syntaxe pro záznam zvuku v cd kvalitě, trvání 10 sekund, ve formátu wav a do domovského adresáře pod názvem out.wav je následující:

arecord -d 10 -f cd -t wav -D hw out.wav

Pokud nenastavíte duration (-d), nahrávku přerušíte v terminálu kombinací ctrl+c. Ve všech návodech se dočteme, že musíme mít nastavenou správnou zvukovou kartu pro vstup a výstup (samozřejmě pokud jich máme v počítači více nebo je připojená třeba webkamera s integrovaným mikrofonem) a korektně nastavené parametry v alsamixeru – položku capture. Konkrétní zvukovou kartu můžete rovněž určit volbou -D (například -D hw:0,1), označení karty se dozvíte ve výpisu příkazem:

arecord -l

2. Ukládání zvuku v mp3

Pokud chcete ukládat rovnou v mp3 (předpokládá to, že nebudete chtít zvuk upravovat, ale rovnou používat), je to velmi snadné. Nanistalujte si kodek lame:

sudo apt-get install lame

Pak použijte přesměrování výstupu z arecord do kodeku příkazem:

arecord -f cd -t raw | lame -x – out.mp3

Jak vidíte, je zde použit formát nahrávání raw. Já osobně dávám přednost doupravení souboru wav v programu Audacity a z něj pak exportuju do mp3 nebo ogg.

3. Pro starší a pokročilé

Někdy to není tak jednoduché a prostě to nefunguje – buď arecord vrací chybu, nebo má soubor s libovolně dlouhou nahrávkou pouze několik kb nebo je prostě němý. Pak přichází na řadu konfigurační soubor .asoundrc.

Soubor slouží k pokročilé konfiguraci vašich zvukových zařízení pod alsou. Vytvoříte ho ve svém domovském adresáři (připomínám jako skrytý, tedy s tečkou na začátku), otevřete v textovém editoru a vložíte kód:

pcm.copy {
  type plug
  slave {
    pcm hw
  }
  route_policy copy
}

Vytvoříte si tak alias s názvem „copy“, pak spustíte arecord s těmito parametry:

arecord -d 10 -f cd -t wav -D copy out.wav

Jiná varianta nastavení .asoundrc se specifikací zvukové karty a zařízení vypadá takto:

pcm.copy {
    type hw
    card 1
    device 0
}

Pokud vaše zařízení přímo nepodporuje stereo-mix zdroj, můžete použít alsa loopback driver, kteý spustíte takto:

sudo modprobe snd-aloop

4. Pro muzikanty – JACK

Muzikanti většinou nepoužívají přímo alsu nebo pulseaudio, ale systém jack a často i realtime jádro.  Nebudu se tu zabývat zprovozněním jack, jen dodám, že se korektně v ubuntu nainstaluje například prímo s aplikací Rosegarden. aby arecord z jacku „slyšel“ zvukový výstup a tedy i něco nahrál, je třeba přidat kód do .asoundrc a opět pouštět arecord s novým parametrem.

V .asoundrc si vytvoříme nový alias jack tímto kódem:

pcm.jackplug {
    type plug
    slave { pcm "jack" }
}

pcm.jack {
    type jack
    playback_ports {
        0 alsa_pcm:playback_1
        1 alsa_pcm:playback_2
    }
    capture_ports {
        0 alsa_pcm:capture_1
        1 alsa_pcm:capture_2
    }
}

A pak už jen pustíme arecord:

arecord -d 10 -f cd -t wav -D jack out.wav

Doporučuji ukládat ve formátu wav a případné další komprese dělat dodatečně, ušetříte tak při nahrávání čas procesoru a vyhnete se občasnému praskání a lupání.

5. Závěr

Utilitku arecord můžete také jednoduše použít na nahrávání internetového rádia nezávisle na nastavení přehrávacího programu, jistě najdete i řadu dalšího uplatnění. Konfigurace možná pro někoho vypadá složitě, ale většinou si asi vystačíte s prvním krokem návodu. Osobně mi dalo nejvíce práce zprovoznit variantu pro JACK, ale to asi jen proto, že mi trvalo, než jsem vygooglil ten správný web.

Sdílet