linux arecord: captura la salida de la tarjeta de sonido en lugar de la entrada del micrófono

20

Estoy tratando de capturar la salida de la tarjeta de sonido y codificarla en formato Vorbis ogg usando el siguiente comando:

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

Sin embargo, la entrada de micrófono de la computadora se graba en lugar de la salida de la tarjeta de sonido.

La salida del comando arecord -les

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

El resultado del comando arecord -Lestá contenido en esta entrada de pastebin .

La arecordpágina del manual indica que el dispositivo de entrada se puede seleccionar usando la -Dbandera, pero no da ejemplos sintácticos.

Me gustaría saber cómo cambiar la entrada arecorddel micrófono a la tarjeta de sonido. No estoy interesado en alternativas basadas en GUI como Audacity. Gracias.

Editar: estoy ejecutando Debian 7.0 (estable) con la arecordversión 1.0.25, la vorbis-toolsversión 1.4.0 y el controlador ALSA versión 1.0.24.

user001
fuente
¿Su hardware tiene algún control de mezclador para enrutar la salida de regreso al dispositivo de captura?
CL.
@CL. El único mezclador preinstalado que conozco es alsamixer. Si selecciono la tarjeta loopback dentro alsamixer(tecla F6 para seleccionar la tarjeta de sonido), recibo el mensaje This sound device does not have any controls. Si salgo del mezclador y regreso, encuentro que la tarjeta de sonido se restablece del loopback a la tarjeta predeterminada. Intentar suspender ( ctrl-z) y el fondo ( bg) el alsamixerproceso después de seleccionar loopbackno permite la grabación exitosa de audio a través del arecordcomando.
user001
La selección de la tarjeta alsamixerno afecta al resto del sistema; solo cambia los controles que se muestran. ¿Cuáles son los controles de selección de grabación del dispositivo Conexant?
CL.
@CL. Para mi dispositivo Conexant, tengo un control de reproducción ( Master) y un control de captura ( Capture) dentro alsamixer. La captura se puede activar y desactivar con la barra espaciadora dentro alsamixery está activada de forma predeterminada. Avíseme si esto no es lo que pretendía. Gracias.
user001

Respuestas:

6

Sugeriría usar el controlador ALSA loopback. Para cargarlo:

sudo modprobe snd-aloop

Esto debería agregar un nuevo dispositivo de captura a la salida de arecord -L.

Si solo tiene una tarjeta de sonido física en su computadora, puede hacer que la tarjeta de sonido loopback sea la predeterminada para todas las aplicaciones creando un archivo .asoundrcen su carpeta de inicio con el siguiente contenido:

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

Mientras este archivo esté en su lugar, cualquier salida de sonido de todas las aplicaciones debe ir al adaptador de bucle invertido en lugar de a los altavoces reales. Simplemente especifique el dispositivo correcto en su comando arecord y una vez que haya terminado, elimine el .asoundrcarchivo para volver a la normalidad.

beveradb
fuente
Gracias por sus sugerencias A pesar de crear .asoundrcen mi directorio personal y reiniciar la sesión del emulador de terminal, el audio todavía se dirige a los altavoces. El arecord -f cd -t raw | oggenc - -r -o file.oggcomando no registra nada. Emitir arecord -lproporciona la misma lista que antes, pero con dos líneas adicionales para card 1: Loopback( devices 0, 1), cada una con 8 subdispositivos ( #0-#7). Del mismo modo, arecord -Lañadido las tres líneas siguientes: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Continúa en el siguiente comentario debido al límite de caracteres.
user001
Intentar arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.ogggraba un archivo de audio en blanco durante el tiempo que se ejecuta el comando (no extrae datos de audio del micrófono como antes). Desafortunadamente, sysdefaultes degenerado ya que se define como ambos CARD=PCH(primera línea de arecord -L) y CARD=Loopback(última línea de arecord -L). Gracias por cualquier sugerencia de seguimiento que pueda proporcionar.
user001
El loopback permite grabar solo lo que se reproduce en su dispositivo de reproducción, no en la salida de la tarjeta de sonido.
CL.
Lo siento, mi respuesta no funcionó, funciona en mi configuración. Recomiendo echar un vistazo a esta explicación del archivo asoundrc: alsa-project.org/main/index.php/Asoundrc . Estoy bastante seguro de que si intentas algunas cosas y juegas un poco más con diferentes dispositivos, deberías haz que funcione. Un poco difícil, pero ¿tiene un cable físico de 3.5 mm-> 3.5 mm? Si es así, siempre puede conectar el conector de salida de sus auriculares al conector de entrada de micrófono / línea.
beveradb
Si no puede hacerlo funcionar con asoundrc, estos enlaces pueden proporcionar más información para ayudar a resolverlo: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 Si aún no puede hacerlo funcionar, puede cambiar a PulseAudio en lugar de ALSA. Esta respuesta explica cómo hacer esto usando PulseAudio: askubuntu.com/questions/171287/…
beveradb
6

años más tarde la lucha continúa ... cómo especificar el dispositivo de grabación, he aquí:

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

Entonces el formato para la cadena del dispositivo es hw:<card>,<device>

formato de identificación del dispositivo

Maciej Jankowski
fuente
6

Tuve el mismo problema y encontré otra solución aquí . La idea principal es usar pacat. Para mí funciona así:

1) encontrar dispositivo de monitor:

$ 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) Capturar audio a archivo:

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

3) Convertir archivo a wav:

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

¡Eso es!

hochl
fuente
3
Tenga en cuenta que puede usar en pareclugar de pacat --record. También puede evitar el uso soxy el uso parec -d <monitor> --file-format=wav output.wav. Puede enumerar los formatos de archivo disponibles con parec --list-file-formats.
Peque
3

Su hardware no admite capturar su salida; Una vez que los datos se hayan introducido en el dispositivo de reproducción real, desaparecerán.

Debe usar algún software que duplique los datos de audio antes de que se escriban en el hardware.

Sugeriría usar PulseAudio; allí puede simplemente seleccionar una de sus salidas como fuente de captura: control de salida de pavucontrol

CL.
fuente
Instalé pavucontrole intenté grabar usando gnome-sound-recorder. Cuando abro gnome-sound-recordery comienzo a recodificar ( Ctrl-R), la secuencia aparece en la ventana de Control de volumen de PulseAudio. Sin embargo, la transmisión en realidad no registra ningún dato (la duración final es 0:00). Además, ¿está familiarizado con cómo realizar la grabación a través de la línea de comandos en lugar de una GUI? Gracias .
user001
1
  1. Vaya a Control de volumen PulseAudio -> pestaña Dispositivos de entrada. En la parte inferior, elija mostrar "TODOS los dispositivos de entrada". Compruebe si "Monitor de audio estéreo analógico interno" no está silenciado y el volumen sube y baja mientras reproduce el audio.

  2. Utilice el Grabador de audio para grabar Fuente de audio = Audio estéreo analógico interno (entrada de audio). Ver captura de pantalla a continuación.

ingrese la descripción de la imagen aquí

Zid
fuente