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.

użytkownik001
źródło
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.

beveradb
źródło
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

Maciej Jankowski
źródło
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!

hochl
źródło
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

CL.
źródło
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

Zid
źródło