linux arecord: przechwytuj wyjście karty dźwiękowej zamiast wejścia mikrofonu


20

Próbuję przechwycić wyjście karty dźwiękowej i zakodować ją w formacie Vorbis ogg za pomocą następującego polecenia:

arecord -f cd -t raw | oggenc - -r -o file.ogg

Jednak wejście mikrofonu komputera jest rejestrowane, a nie wyjście karty dźwiękowej.

Dane wyjściowe polecenia arecord -lto

**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Dane wyjściowe polecenia arecord -Lsą zawarte w tym wpisie pastebin .

Strona arecordman wskazuje, że urządzenie wejściowe można wybrać za pomocą -Dflagi, ale nie podaje przykładów składniowych.

Chciałbym wiedzieć, jak zmienić wejście arecordz mikrofonu na kartę dźwiękową. Nie interesują mnie alternatywy oparte na GUI, takie jak Audacity. Dzięki.

Edycja: Używam Debiana 7.0 (stabilnego) z arecordwersją 1.0.25, vorbis-toolswersją 1.4.0 i sterownikiem ALSA w wersji 1.0.24.


Czy twój sprzęt ma kontrolę nad mikserem, aby skierować wyjście z powrotem do urządzenia przechwytującego?
— CL.

@CL. Jedyny preinstalowany mikser, o którym wiem, to alsamixer. Jeśli wybiorę kartę pętli zwrotnej w alsamixer(klawisz F6, aby wybrać kartę dźwiękową), otrzymam wiadomość This sound device does not have any controls. Jeśli wyjdę z miksera i wrócę, stwierdzę, że karta dźwiękowa została przywrócona z pętli zwrotnej do karty domyślnej. Próba zawieszenia ( ctrl-z) i tła ( bg) alsamixerprocesu po wybraniu loopbacknie umożliwia pomyślnego nagrania dźwięku za pomocą arecordpolecenia.
— 2013

Wybór karty alsamixernie wpływa na resztę systemu; zmienia tylko pokazane kontrolki. Jakie są opcje wyboru nagrywania w urządzeniu Conexant?
— CL.

@CL. Dla mojego urządzenia Conexant mam jedną kontrolę odtwarzania ( Master) i jedną kontrolę przechwytywania ( Capture) alsamixer. Przechwytywanie można włączać i wyłączać za pomocą spacji wewnątrz alsamixeri jest domyślnie włączone. Daj mi znać, jeśli nie jest to zamierzone. Dzięki.
— 2013

Odpowiedzi:


6

Sugeruję użycie sterownika sprzężenia zwrotnego ALSA. Aby załadować:

sudo modprobe snd-aloop

To powinno dodać nowe urządzenie przechwytujące do wyjścia arecord -L.

Jeśli masz tylko jedną fizyczną kartę dźwiękową w komputerze, możesz ustawić domyślną kartę dźwiękową z pętlą zwrotną dla wszystkich aplikacji, tworząc plik .asoundrcw folderze domowym z następującą zawartością:

pcm.!default {
    type hw
    card 1
    device 0
}

Gdy ten plik jest na miejscu, wszelkie wyjścia dźwięku ze wszystkich aplikacji powinny być kierowane do adaptera sprzężenia zwrotnego, a nie do rzeczywistych głośników. Po prostu określ właściwe urządzenie w poleceniu arecord, a kiedy skończysz, usuń .asoundrcplik, aby powrócić do normalnego stanu.


Dziękuję za twoje sugestie. Pomimo utworzenia .asoundrcw moim katalogu domowym i ponownego uruchomienia sesji emulatora terminala, dźwięk jest nadal kierowany do głośników. arecord -f cd -t raw | oggenc - -r -o file.oggKomenda zapisuje niczego. Wydanie arecord -lzawiera tę samą listę, co poprzednio, ale z dwoma dodatkowymi wierszami dla card 1: Loopback( devices 0, 1), każda z 8 pod-urządzeniami ( #0-#7). Podobnie, arecord -Ldodano trzy następujące linie: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Ciąg dalszy w następnym komentarzu ze względu na limit znaków.
— 2013

Attemping arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.oggnagrywa pusty plik audio na czas wykonywania polecenia (nie pobiera danych audio z mikrofonu jak poprzednio). Niestety sysdefaultjest zdegenerowany, ponieważ jest zdefiniowany jako CARD=PCH(pierwsza linia arecord -L) i CARD=Loopback(ostatnia linia arecord -L). Dziękujemy za wszelkie sugestie dotyczące działań następczych, które możesz podać.
— 2013

Sprzężenia zwrotnego pozwala nagrywać tylko to, co jest odtwarzane na jego urządzeniu odtwarzającym, nie do wyjścia karty dźwiękowej.
— CL.

Niestety moja odpowiedź nie zadziałała - działa w moim systemie. Poleciłbym rzucić okiem na to wyjaśnienie pliku asoundrc: alsa-project.org/main/index.php/Asoundrc Jestem całkiem pewien, że jeśli spróbujesz kilku rzeczy i bawisz się z różnymi urządzeniami nieco więcej, powinieneś uruchom to. Trochę kłębka, ale czy zdarza ci się mieć fizyczny kabel 3,5 mm -> 3,5 mm? Jeśli tak, zawsze możesz po prostu podłączyć wyjście słuchawkowe do gniazda mikrofonowego / liniowego.
— beveradb

Jeśli nie możesz uruchomić go z asoundrc, te linki mogą dostarczyć więcej informacji, które pomogą ci to zrozumieć: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 Jeśli nadal nie możesz go uruchomić, możesz przejść do korzystania z PulseAudio zamiast ALSA. Ta odpowiedź wyjaśnia, jak to zrobić za pomocą PulseAudio: askubuntu.com/questions/171287/…
— beveradb

6

lata później walka trwa ... jak określić urządzenie nagrywające, lo i oto:

➜  ~ arecord -l                                                              
**** List of CAPTURE Hardware Devices ****                                   
card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0                                                 
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0     

➜  ~ arecord -f S16_LE -r 44100 --device="hw:1,0" plik.wav                   
Recording WAVE 'plik.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono 
^C
Aborted by signal Interrupt...  

Tak więc format ciągu urządzenia to hw:<card>,<device>

format identyfikatora urządzenia


6

Miałem ten sam problem i znalazłem tutaj inne rozwiązanie . Główną ideą jest użycie pacat. Dla mnie działa to tak:

1) znajdź urządzenie monitorujące:

$ pacmd list | grep "\.monitor"
name: <alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor>
name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
        alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor/#0: Monitor of HDA NVidia Digital Stereo (HDMI)
        alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#2: Monitor of Built-in Audio Analog Stereo

2) Przechwyć dźwięk do pliku:

$ pacat --record -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor > dump.raw

3) Konwertuj plik na wav:

sox -t raw -r 44100 -e signed-integer -L -b 16 -c 2 dump.raw output.wav

Otóż ​​to!


3
Pamiętaj, że możesz użyć pareczamiast pacat --record. Możesz także uniknąć używania soxi używania parec -d <monitor> --file-format=wav output.wav. Możesz wyświetlić listę dostępnych formatów plików za pomocą parec --list-file-formats.
— Peque

3

Twój sprzęt nie obsługuje przechwytywania danych wyjściowych; gdy dane trafią do faktycznego urządzenia odtwarzającego, znikają.

Musisz użyć oprogramowania, które powiela dane audio, zanim zostaną zapisane na sprzęcie.

Sugerowałbym użycie PulseAudio; tam możesz po prostu wybrać jedno z jego wyjść jako źródło przechwytywania: monitorowanie wydajności pavucontrol


Zainstalowałem pavucontroli próbowałem nagrywać za pomocą gnome-sound-recorder. Po otwarciu gnome-sound-recorderi rozpoczęciu przekodowywania ( Ctrl-R) strumień pojawia się w oknie regulacji głośności PulseAudio. Jednak strumień nie rejestruje żadnych danych (końcowa długość to 0:00). Czy znasz również sposób nagrywania za pomocą wiersza polecenia zamiast GUI? Dzięki .
— 2013

1
  1. Przejdź do PulseAudio Volume Control -> Zakładka Input Devices. Na dole wybierz opcję „WSZYSTKIE urządzenia wejściowe”. Sprawdź, czy „Monitor wewnętrznego analogowego stereo audio” nie jest wyciszony, a głośność rośnie i maleje podczas odtwarzania dźwięku !!

  2. Użyj nagrywarki audio, aby nagrać źródło audio = wewnętrzne audio Analogowe stereo (wejście audio). Zobacz zrzut ekranu poniżej.

wprowadź opis zdjęcia tutaj


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.