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ę. Postanowiłem podzielić się rozwiązaniem tego zagadnienia, być może komuś się przyda. Wykorzystany w tym celu będzie konsolowy program o nazwie arecord , który powinien być dostarczony z Alsą.
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 na Analog Stereo Output.
Pozdrawiam!