Quero criar um fifo com arecord e aplay no raspberry pi3. Quando envio o sinal de música do injetor de áudio em uma extremidade, ele é exibido corretamente, mas desativo a música na outra extremidade. Estou usando "arecord -f S16_LE -r 44100 -V estéreo -c1 -D plughw:2 | aplay -D plughw:2"
Por favor me diga como resolver isso e como parar esse comando sem usar ctrl+c ???
Responder1
Não tenho certeza do que você está tentando fazer, em particular não entendo "desativar a música do outro lado", mas
1) Encaminhar fluxos de áudio é muito mais fácil no Pulseaudio (ou jack) do que no ALSA.
2) Ao usar arecord
em um pipe, não use o formato WAV, pois o cabeçalho WAV possui uma entrada de comprimento, que não pode ser preenchida em um pipe. Use raw( -t raw
) e especifique os parâmetros corretos em aplay
, ou use o formato de áudio SUN ( -t au
).
3) O canal arecord-aplay será executado até que você o interrompa com ctrl-c ou até que um ou ambos os processos sejam eliminados (usando kill
). Não há outra maneira de fazer isso.
Responder2
Para interromper o comando que você possui, adicione uma variável de duração (-d) em segundos para gravar assim:
arecord -f S16_LE -r 44100 -V stereo -c1 -d2 -D plughw:2 | aplay -D plughw:2
Este comando interromperá a gravação após -d2 ou 2 segundos.
Se você usar o comando alsamixer, poderá alterar as configurações do mixer. Isso permitirá que você selecione a entrada (microfone ou linha), bem como habilite a saída hifi (para ouvir o som) e também você pode habilitar o modo bypass que direcionará a entrada de áudio diretamente para a saída através do sistema analógico, em vez de a CPU. No modo bypass você ainda pode usar um registro para capturar o sinal.