Gostaria que meu RasPi enviasse áudio para a porta de saída de áudio interna e também para a placa de saída digital (um Digif Hifiberry I2S). Isso deve ser possível com a ALSA. Eu tenho os drivers carregados e posso enviar para os dois dispositivos de som individualmente, mas combiná-los simplesmente não está funcionando. Existem vários posts explicando como fazer isso, mas não consigo fazer minha configuração funcionar.
O erro do aplay:
Playing WAVE 'sin1000_48khz.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable
aplay: set_params:1059: Broken configuration for this PCM: no configurations available
Saída de "aplay -l"
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpihifiberry [snd_rpi_hifiberry_digi], device 0: HifiBerry Digi HiFi wm8804-spdif-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
Saída de "aplay -L"
null
Discard all samples (playback) or generate zero samples (capture)
sysdefault:CARD=sndrpihifiberry
snd_rpi_hifiberry_digi,
Default Audio Device
sysdefault:CARD=ALSA
bcm2835 ALSA, bcm2835 ALSA
Default Audio Device`
Conteúdo do /etc/asound.conf
pcm.both {
type route
slave.pcm {
type multi
slaves.a.pcm "hw:0,0"
slaves.b.pcm "hw:1,0"
slaves.a.channels 2
slaves.b.channels 2
bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}
ttable.0.0 1
ttable.1.1 1
ttable.0.2 1
ttable.1.3 1
}
ctl.both {
type hw
card sndrpihifiberry
device 0
}
pcm.hifiberry {
type hw
card sndrpihifiberry
device 0
}
ctl.hifiberry {
type hw
card sndrpihifiberry
device 0
}
pcm.audioout {
type hw
card ALSA
device 0
}
ctl.audioout {
type hw
card ALSA
device 0
}
pcm.!default {
type plug
slave {
pcm both
}
}
#pcm.!default {
# type hw
# card sndrpihifiberry
# device 0
#}
ctl.!default {
type hw
card sndrpihifiberry
device 0
}
audio
audio-playback
Christi
fonte
fonte
Respostas:
É um pouco hacky, mas você já considerou o
tee
comando? Leia mais sobre o StackExchange na re-direção do tee e consulte a seção de artigos da Wiki para obter mais exemplos. Estou pensando que, se você tem um comando que gera o nome do arquivo ou o link para o conteúdo da mídia,ls
talvez, e usetee
para chamar comandos para o seu media player preferido. Aqui está como eu script em torno do problema ...Notas:
... depois dos testes, eu provavelmente jogaria
if [ ${#} < 4]; then echo "error"; fi
perto do topo; editar o4
número de argumentos que senti que precisa estar lá. Executando como está, não sebash scripted_dule_player 'aplay <common_options>' '<options_output1>' '<options_output2>' '</full/file/path/to/mediafile>'
esqueça de modificar para o seu sistema as opções e caminhos de arquivo que você deseja executar; as coisas entre<>
.Os problemas com o uso
tee
são que ele não é muito portável entre os tipos de Linux e pode causar problemas com o áudio não sendo reproduzido em sincronia entre as saídas. Em vez disso, sugiro usaromxplayer -o both
a saída de som para dois dispositivos separados, mas como isso só foi testado em um RPi com saída HDMI e áudio conectada, não é exatamente a configuração usada pelo OP e pelo OP solicitadoalsa
.Há também um bom blog sobre o assunto das configurações da alsa multi placa de som para vários usuários que você pode procurar; talvez você tenha um erro seu que fará com que meu código acima bloqueie um ponto discutível; apenas observe que o guia foi voltado para o Linux com sabor de Slaker e não para Raspbian.
fonte