Linux Arecord: cattura l'uscita della scheda audio anziché l'ingresso del microfono


20

Sto cercando di catturare l'output della scheda audio e codificarlo in formato Vorbis ogg usando il seguente comando:

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

Tuttavia, viene registrato l'ingresso del microfono del computer anziché l'uscita della scheda audio.

L'output del comando arecord -lè

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

L'output del comando arecord -Lè contenuto in questa voce pastebin .

La arecordpagina man indica che il dispositivo di input può essere selezionato usando il -Dflag, ma non fornisce esempi sintattici.

Vorrei sapere come modificare l'ingresso arecorddal microfono alla scheda audio. Non mi interessano le alternative basate sulla GUI come Audacity. Grazie.

Modifica: sto eseguendo Debian 7.0 (stabile) con arecordversione 1.0.25, vorbis-toolsversione 1.4.0 e driver ALSA versione 1.0.24.


Il tuo hardware ha qualche controllo del mixer per indirizzare l'output al dispositivo di acquisizione?
CL.

@CL. L'unico mixer preinstallato di cui sono a conoscenza è alsamixer. Se seleziono la scheda loopback all'interno alsamixer(tasto F6 per selezionare la scheda audio), ricevo il messaggio This sound device does not have any controls. Se esco dal mixer e torno, trovo che la scheda audio sia ripristinata dal loopback alla scheda predefinita. Il tentativo di sospendere ( ctrl-z) e in background ( bg) il alsamixerprocesso dopo la selezione loopbacknon consente la corretta registrazione dell'audio tramite il arecordcomando.
user001

La selezione della carta in alsamixernon influisce sul resto del sistema; cambia solo i controlli mostrati. Quali sono i controlli di selezione della registrazione del dispositivo Conexant?
CL.

@CL. Per il mio dispositivo Conexant, ho un controllo di riproduzione ( Master) e un controllo di acquisizione ( Capture) all'interno alsamixer. L'acquisizione può essere attivata e disattivata con la barra spaziatrice all'interno alsamixered è attivata per impostazione predefinita. Per favore fatemi sapere se questo non è quello che intendevi. Grazie.
user001,

Risposte:


6

Suggerirei di utilizzare il driver di loopback ALSA. Per caricarlo:

sudo modprobe snd-aloop

Ciò dovrebbe aggiungere un nuovo dispositivo di acquisizione all'output da arecord -L.

Se hai una sola scheda audio fisica nel tuo computer, puoi impostare la scheda audio di loopback come predefinita per tutte le app creando un file .asoundrcnella cartella principale con il seguente contenuto:

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

Mentre questo file è a posto, qualsiasi suono emesso da tutte le applicazioni dovrebbe andare all'adattatore di loopback piuttosto che agli altoparlanti reali. Basta specificare il dispositivo corretto nel comando arecord e, una volta terminato, rimuovere il .asoundrcfile per tornare alla normalità.


Grazie per i vostri suggerimenti. Nonostante la creazione .asoundrcnella mia directory home e il riavvio della sessione dell'emulatore di terminale, l'audio viene comunque indirizzato agli altoparlanti. Il arecord -f cd -t raw | oggenc - -r -o file.oggcomando non registra nulla. L'emissione arecord -lfornisce lo stesso elenco di prima, ma con due righe aggiuntive per card 1: Loopback( devices 0, 1), ciascuna con 8 sottodispositivi ( #0-#7). Analogamente, arecord -Laggiunte le seguenti tre righe: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Continua nel prossimo commento a causa del limite di caratteri.
user001

Il tentativo di arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.oggregistrare un file audio vuoto per la durata dell'esecuzione del comando (non disegna i dati audio dal microfono come prima). Sfortunatamente, sysdefaultè degenerato in quanto è definito sia CARD=PCH(prima riga di arecord -L) che CARD=Loopback(ultima riga di arecord -L). Grazie per eventuali suggerimenti di follow-up che sei in grado di fornire.
user001

Il loopback consente di registrare solo ciò che viene riprodotto sul suo dispositivo di riproduzione, non sull'uscita della scheda audio.
CL.

Spiacenti, la mia risposta non ha funzionato: funziona sulla mia configurazione. Consiglio di dare un'occhiata a questa spiegazione del file asoundrc: alsa-project.org/main/index.php/Asoundrc Sono abbastanza sicuro che se provi alcune cose e giochi con dispositivi diversi un po 'di più dovresti farlo funzionare. Un po 'un kludge, ma ti capita di avere un cavo fisico da 3,5 mm-> 3,5 mm? In tal caso, puoi sempre collegare la presa di uscita delle cuffie alla presa di ingresso microfono / linea.
Beveradb,

Se non riesci a farlo funzionare con asoundrc, questi collegamenti potrebbero fornire ulteriori informazioni per aiutarti a scoprirlo: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 Se non riesci ancora a farlo funzionare, puoi passare a utilizzare PulseAudio invece di ALSA. Questa risposta spiega come fare usando PulseAudio: askubuntu.com/questions/171287/…
beveradb

6

Ho avuto lo stesso problema e ho trovato un'altra soluzione qui . L'idea principale è di usare pacat. Per me funziona così:

1) trova dispositivo di monitoraggio:

$ 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) Cattura l'audio su file:

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

3) Convertire il file in wav:

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

Questo è tutto!


3
Si noti che è possibile utilizzare parecinvece di pacat --record. Puoi anche evitare l'uso soxe l'uso parec -d <monitor> --file-format=wav output.wav. Puoi elencare i formati di file disponibili con parec --list-file-formats.
Peque,

5

anni dopo la lotta continua ... come specificare il dispositivo di registrazione, ecco:

➜  ~ 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...  

Quindi il formato per la stringa del dispositivo è hw:<card>,<device>

formato dell'ID dispositivo


3

Il tuo hardware non supporta l'acquisizione del suo output; una volta che i dati sono entrati nel dispositivo di riproduzione reale, sono andati.

È necessario utilizzare alcuni software che duplicano i dati audio prima che vengano scritti sull'hardware.

Suggerirei di usare PulseAudio; lì puoi semplicemente selezionare uno dei suoi output come sorgente di acquisizione: monitoraggio dell'uscita pavucontrol


Ho installato pavucontrole provato a registrare usando gnome-sound-recorder. Quando apro gnome-sound-recordere inizio la ricodifica ( Ctrl-R), il flusso appare nella finestra Controllo volume PulseAudio. Lo stream in realtà non registra alcun dato, tuttavia (la lunghezza finale è 0:00). Inoltre, hai familiarità con come eseguire la registrazione tramite riga di comando anziché tramite una GUI? Grazie .
user001,

1
  1. Vai a Controllo volume PulseAudio -> Scheda Dispositivi di input. In fondo, scegli di mostrare "TUTTI i dispositivi di input". Controlla se "Monitor dell'audio stereo analogico interno" non è disattivato e il volume aumenta e diminuisce mentre riproduci l'audio !!

  2. Utilizzare il registratore audio per registrare la sorgente audio = audio analogico stereo interno (ingresso audio). Vedi screenshot di seguito.

inserisci qui la descrizione dell'immagine


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.