Stereo Mix w Linux.
W ramach odpoczynku od tematów typu Windows kontra Linux i od mojego przynudzania opowieściami o Linuksie postanowiłem opisać jak uzyskać efekt znany z systemów Windows jako Stereo Mix, być może komuś się to przyda. Dla mnie przy okazji ten wpis będzie notatką gdybym znowu tego potrzebował a moja pamięć w głowie jest raczej typu RAM, czyli krótka.
Jakiś czas temu zaistniała u mnie potrzeba zgrania pewnego materiału granego przez kartę dźwiękową z innego źródła niż plik dźwiękowy/wideo, przypomniało mi się że w Windows jest takie coś jak stereo mix. Zaglądam do ustawień karty dźwiękowej i oczywiście pod Linuksem tego nie widzę. Zacząłem początkowo kombinować coś w Audacity, przegrzebałem opcje, dokumentacje, Wiki, poradniki no i nic z tego. Jak zwykle zacząłem szukać w sieci informacji czy takie coś jest w ogóle możliwe. Ponieważ temat nie jest jakoś szczególnie popularny, więc musiałem głęboko pogrzebać w zasobach Google. Znalazłem na forach porady, dotyczące konfiguracji Alsy ale że leniwy jestem to nie chciało mi się grzebać przy Alsie aż w końcu znalazłem na pewnym forum pewną propozycję - wykorzystać do tego celu konsolowy program o nazwie arecord, który powinien być domyślnie zainstalowany w systemie jako składnik Alsy.
W tym celu należy uruchomić terminal, włączyć dźwięk który ma być zgrany, np. z przeglądarki internetowej i wydać takie polecenie:
arecord -f cd nazwa_pliku
Oczywiście w ten sposób dźwięk zostanie zgrany do pliku o jakości CD, domyślnie jest to plik WAVE (częstotliwość próbkowania 44,1 kHz przy 16‑bitach). Jakość jak i rodzaj pliku można dowolnie zmieniać, jednak na ten temat nie będę się rozpisywał, ponieważ wszystko ładnie opisano w podręczniku systemowym, wystarczy wydać w terminalu polecenie man arecord.
Jak wiadomo, plik WAVE ze względu na jakość pochłonie sporą ilość wolnego miejsca na dysku, więc plik można w tzw. "locie" zakodowować do pliku mp3 dowolnej jakości przy pomocy również konsolowego Lame, który najprawdopodobniej trzeba sobie doinstalować. Kodowanie odbywać się będzie w taki sposób:
arecord -f cd | lame -h - plik.mp3
Jak widać Lame działa jako potok, więc plik wyjściowy WAVE jest od razu kodowany do pliku mp3 najwyższej jakości. W pierwszej części polecenia, nie ma potrzeby podawania nazwy dla pliku WAVE, ponieważ on i tak jest kierowany do Lame. Opcja -h odpowiada za kodowanie do najwyższej jakości (highest). Ważny jest ten myślnik przed nazwą pliku mp3 (tam są oczywiście przed i za nim spacje), oznacza on że Lame ma kodować standardowe wyjście skierowane do Lame, w tym wypadku tworzony przez arecord plik WAVE, o czym pisałem w pierwszym zdaniu tegoż akapitu. Więcej opcji, dotyczących kodowania przy pomocy Lame można znaleźć w man lame.
Leniwi mogą napisać sobie taki skrypt, aby nie trzeba było za każdym razem klepać tego przydługiego polecenia :)
#!/bin/sh arecord -f cd | lame -h - $1.mp3
Ponieważ podałem w skrypcie zmienną $1 oznacza to, że nazwa pliku mp3 przyjmie nazwę jaką poda się jako argument skryptu, np. mój skrypt nazywa się stereo_mix, więc uruchamiając go w taki sposób:
./stereo_mix muzyczka
plik mp3 przyjmie nazwę muzyczka.mp3.
W przypadku mojej karty wymagana była również zmiana w ustawieniach karty dźwiękowej profilu z Analog Stereo Duplex jak na obrazku poniżej
na Analog Stereo Output