linux arecord: captura a saída da placa de som em vez da entrada do microfone


20

Estou tentando capturar a saída da placa de som e codificá-la no formato Vorbis ogg usando o seguinte comando:

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

No entanto, a entrada do microfone do computador é gravada e não a saída da placa de som.

A saída do 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

A saída do comando arecord -Lestá contida nesta entrada pastebin .

A arecordpágina de manual indica que o dispositivo de entrada pode ser selecionado usando o -Dsinalizador, mas não fornece exemplos sintáticos.

Gostaria de saber como alterar a entrada arecorddo microfone para a placa de som. Não estou interessado em alternativas baseadas em GUI, como o Audacity. Obrigado.

Edit: Estou executando o Debian 7.0 (estável) com a arecordversão 1.0.25, vorbis-toolsversão 1.4.0 e o driver ALSA versão 1.0.24.


Seu hardware possui algum controle de mixer para direcionar a saída de volta ao dispositivo de captura?
CL.

@CL. O único mixer pré-instalado que eu conheço é alsamixer. Se eu selecionar a placa de loopback alsamixer(tecla F6 para selecionar a placa de som), recebo a mensagem This sound device does not have any controls. Se eu sair do mixer e retornar, acho que a placa de som é restaurada do loopback para a placa padrão. Tentar suspender ( ctrl-z) e colocar em segundo plano ( bg) o alsamixerprocesso após a seleção loopbacknão habilita a gravação bem-sucedida do áudio por meio do arecordcomando.
User001

A seleção de cartão em alsamixernão afeta o resto do sistema; apenas muda quais controles são mostrados. Quais são os controles de seleção de gravação do dispositivo Conexant?
CL.

@CL. Para o meu dispositivo Conexant, tenho um controle de reprodução ( Master) e um controle de captura ( Capture) dentro alsamixer. A captura pode ser ativada e desativada com a barra de espaço dentro alsamixere está ativada por padrão. Informe-me se não foi isso que você pretendia. Obrigado.
User001

Respostas:


6

Eu sugiro usar o driver de loopback ALSA. Para carregá-lo:

sudo modprobe snd-aloop

Isso deve adicionar um novo dispositivo de captura à saída de arecord -L.

Se você tiver apenas uma placa de som física em seu computador, poderá tornar a placa de som de loopback o padrão para todos os aplicativos, criando um arquivo .asoundrcem sua pasta pessoal com o seguinte conteúdo:

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

Enquanto esse arquivo estiver no lugar, qualquer saída de som de todos os aplicativos deve ir para o adaptador de loopback, e não para os alto-falantes reais. Basta especificar o dispositivo correto no seu comando arecord e, quando terminar, remova o .asoundrcarquivo para voltar ao normal.


Obrigado por suas sugestões. Apesar de criar .asoundrcno meu diretório pessoal e reiniciar a sessão do emulador de terminal, o áudio ainda é direcionado para os alto-falantes. O arecord -f cd -t raw | oggenc - -r -o file.oggcomando não registra nada. A emissão arecord -lfornece a mesma lista de antes, mas com duas linhas adicionais para card 1: Loopback( devices 0, 1), cada uma com 8 subdevices ( #0-#7). Da mesma forma, arecord -Ladicionados os seguintes três linhas: sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device. Continua no próximo comentário devido ao limite de caracteres.
User001

A tentativa de arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.ogggravar um arquivo de áudio em branco pela duração em que o comando é executado (ele não extrai dados de áudio do microfone como antes). Infelizmente, sysdefaulté degenerado, pois é definido como sendo CARD=PCH(primeira linha de arecord -L) e CARD=Loopback(última linha de arecord -L). Obrigado por todas as sugestões de acompanhamento que você pode fornecer.
user001 20/05

O loopback permite gravar apenas o que é reproduzido no seu dispositivo de reprodução, não na saída da placa de som.
CL.

Desculpe, minha resposta não funcionou - funciona na minha configuração. Eu recomendo dar uma olhada nesta explicação do arquivo asoundrc: alsa-project.org/main/index.php/Asoundrc Tenho certeza de que, se você tentar algumas coisas e brincar um pouco mais com diferentes dispositivos, deveria fazê-lo funcionar. Um pouco esquisito, mas você tem um cabo físico de 3,5 mm a 3,5 mm? Nesse caso, você sempre pode conectar o conector de saída do fone de ouvido ao conector de entrada de microfone / linha.
beveradb

Se você não pode fazê-lo funcionar com asoundrc, esses links podem fornecer mais informações para ajudar figura it out: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 se você ainda não consegue fazê-lo funcionar, pode mudar para o PulseAudio em vez do ALSA. Esta resposta explica como fazer isso usando PulseAudio: askubuntu.com/questions/171287/...
beveradb

6

anos depois, a luta continua ... como especificar o dispositivo de gravação, eis:

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

Portanto, o formato da string do dispositivo é hw:<card>,<device>

formato do ID do dispositivo


6

Eu tive o mesmo problema e encontrei outra solução aqui . A idéia principal é usar pacat. Para mim, funciona assim:

1) encontre o dispositivo 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 áudio em arquivo:

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

3) Converta arquivo para wav:

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

É isso aí!


3
Observe que você pode usar em parecvez de pacat --record. Você também pode evitar o uso soxe uso parec -d <monitor> --file-format=wav output.wav. Você pode listar os formatos de arquivo disponíveis com parec --list-file-formats.
Peque

3

Seu hardware não suporta a captura de sua saída; depois que os dados entram no dispositivo de reprodução real, eles desaparecem.

Você precisa usar algum software que duplique os dados de áudio antes de serem gravados no hardware.

Eu sugiro usar o PulseAudio; lá você pode simplesmente selecionar uma de suas saídas como fonte de captura: monitoramento de saída do pavucontrol


Eu instalei pavucontrole tentei gravar usando gnome-sound-recorder. Quando abro gnome-sound-recordere começo a recodificar ( Ctrl-R), o fluxo aparece na janela do controle de volume PulseAudio. O fluxo, na verdade, não registra nenhum dado (a duração final é 0:00). Além disso, você conhece como executar a gravação por linha de comando em vez de uma GUI? Obrigado .
User001

1
  1. Vá para Controle de volume PulseAudio -> guia Dispositivos de entrada. Na parte inferior, escolha mostrar "TODOS os dispositivos de entrada". Verifique se "O monitor do áudio estéreo analógico interno" não está mudo e o volume aumenta e diminui à medida que você reproduz o áudio!

  2. Use o gravador de áudio para gravar a fonte de áudio = estéreo analógico de áudio interno (entrada de áudio). Veja a captura de tela abaixo.

insira a descrição da imagem aqui


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.