Erro ALSA: Contagem de canais (2) não disponível para reprodução: argumento inválido

1

Eu recebo o seguinte erro ao tentar gravar usando um microfone USB por meio do ALSA: Channel count (2) not available for playback: Invalid argument

Meu pensamento inicial foi que a ALSA não conseguiu encontrar o microfone, mas acabou descobrindo que está tudo bem. Meu próximo pensamento é que pode ser porque ALSA quer gravar em estéreo, e meu microfone só funciona como mono. Como eu mudaria o ALSA para executar mono se esse for o caso? Ou estou completamente no caminho errado?

Editar:

Deve-se notar que estou usando um microfone jackstick em um conversor usb, que depois é inserido no RPi. O conversor USB tem uma entrada de microfone e uma entrada de fone de ouvido, que eu não uso. Eu queria saber se ele recebeu o erro, porque não havia alto-falante na placa de som que eu estava usando; no entanto, mesmo quando se conecta um fone de ouvido à conversão USB, o problema persiste.

Edit2: Estou executando um modelo Simulink no meu Raspberry Pi, que precisa de registro em tempo real. Se eu simular através do laptop para o pi framboesa, ele funciona sem falhas. O problema surge quando tento executar o modelo no meu Raspberry Pi por si mesmo e, em seguida, o erro aparece.

Edit3: Verificou com o comando amixer e obteve o seguinte resultado:

Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 62
  Mono:
  Front Left: Playback 42 [68%] [-20.00dB] [on]
  Front Right: Playback 42 [68%] [-20.00dB] [on]
Simple mixer control 'Mic',0
  Capabilities: pvolume pvolume-joined cvolume cvolume-joined pswitch pswitch-joined cswitch cswitch-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: Playback 0 - 43 Capture 0 - 63
  Mono: Playback 40 [93%] [26.00dB] [on] Capture 60 [95%] [46.00dB] [on]

Eu assumo que o problema depende da reprodução do microfone de alguma forma. Talvez alguns de vocês possam me ajudar a esclarecer isso.

Meu .asoundrc:

defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.device 0

editado .asoundrc:

pcm.!default {
        type hw
        card 1
        slave {
                pcm "hw:1,0"
                channels 1
        }
}

ctl.!default {
        type hw
        card 1
        channels 1
}

Edição de modelo: O problema ainda aparece quando se tem um modelo apenas com o seguinte bloco: link

    
por Jon Dier 20.04.2017 / 15:35

1 resposta

1

Sim, é porque, se você estiver gravando diretamente do dispositivo de hardware, só poderá gravar nos formatos, número de canais, taxa de bits, etc., diretamente suportados pelo hardware. Então, quando você faz algo como

arecord -D hw:0,0 out.wav

você vai se deparar com esse problema; você precisará adicionar os parâmetros corretos como em

arecord -D hw:0,0 -c 1 -f S16_BE -f44100 out.wav

(claro, com os parâmetros do seu dispositivo, não estes), ou você pode usar um plug-in de conversão que o ALSA disponibiliza automaticamente para cada dispositivo, como em

arecord -D plughw:0,0 ... out.wav

e depois será convertido para qualquer formato que você especificar.

O mesmo se aplica a qualquer outro aplicativo que tente gravar via ALSA. Você também pode configurar seu próprio ~/.asoundrc com padrões razoáveis, se quiser.

Use arecord -L para obter uma lista de quais dispositivos / plugins você pode gravar. Possivelmente você desejará usar o plugin dsnoop fornecido automaticamente, mas você não nos disse para que precisa gravar e o que exatamente você fez quando tentou gravar.

Editar :

Ok, a informação que faltava era:

You are using a program called Mathworks. This program has a block for audio capture, which has a parameter called Device Name. The parameter defaults to hw:1,0.

Contanto que esse parâmetro esteja definido para qualquer valor de hw:... , você pode gravar coisas no seu ~/.asoundrc até ficar com a cara na cor azul, e isso não mudará nada, porque hw:... significa "usar o hardware diretamente, não importa todos os outros plugins especificados em ~/.asoundrc ".

O primeiro passo é identificar o dispositivo correto: Do arecord -l , e você verá algo como

card X: NAME_OF_CARD, device Y: NAME_OF_DEVICE
  ...

Agora, altere o valor do parâmetro acima para plughw:X,Y , por ex. plughw:1,0 , exclua seu ~/.asoundrc para remover uma possível fonte adicional de erros e tente novamente. plughw:... colocará um plug plug-in diretamente em frente ao determinado dispositivo de hardware como um escravo.

Se ainda assim não funcionar, existem duas razões possíveis, e a mensagem de erro que você receberá mostrará uma sugestão:

(1) O bloco Mathworks é escrito de tal forma que funciona apenas diretamente com dispositivos de hardware, não com plugins, e não tem como alterar o número de canais (talvez haja um parâmetro extra que eles esqueceram de mencionar em a documentação). Nesse caso, não há muito que você possa fazer. Você pode tentar usar dsp.audiofilereader em um canal nomeado com arecord do outro lado, mas não tenho certeza de como isso funcionaria, e é uma medida paliativa.

(2) O plughw plugin deve converter automaticamente os canais IIRC, mas talvez não. Então você terá que escrever explicitamente um plugin em seu ~/.asoundrc , mas vamos fazer isso apenas se for necessário.

    
por 20.04.2017 / 18:40

Tags