Chciałbym, aby mój RasPi wysyłał dźwięk do mojego portu wyjścia audio na pokładzie, a także do mojej karty wyjścia cyfrowego (I2S Hifiberry Digi). Powinno to być możliwe dzięki ALSA. Mam załadowane sterowniki i mogę wysyłać je do obu urządzeń dźwiękowych osobno, ale ich połączenie po prostu nie działa. Istnieje kilka postów wyjaśniających, jak to zrobić, ale nie mogę uruchomić konfiguracji.
Błąd z gry:
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
Wyjście „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
Wyjście „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`
Zawartość pliku /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
źródło
źródło
Odpowiedzi:
To trochę zuchwałe, ale czy zastanawiałeś się nad
tee
poleceniem? Przeczytaj więcej o StackExchange na temat zmiany kierunku tee i zobacz artykuł Wiki, aby uzyskać więcej przykładów. Myślę, że jeśli masz polecenie, które wyświetla nazwę pliku lub link do treści multimedialnej,ls
być może używasz gotee
do wywoływania poleceń do preferowanego odtwarzacza multimedialnego. Oto jak opisałbym problem ...Uwagi:
... po testach i tak dalej prawdopodobnie rzuciłbym się
if [ ${#} < 4]; then echo "error"; fi
blisko szczytu; edytowanie4
liczby argumentów, które według mnie powinny tam być. Działając w takim stanie, należybash scripted_dule_player 'aplay <common_options>' '<options_output1>' '<options_output2>' '</full/file/path/to/mediafile>'
koniecznie zmodyfikować w systemie opcje i ścieżki plików, które chcesz uruchomić; rzeczy pomiędzy<>
.Problemy z używaniem
tee
polegają na tym, że nie jest bardzo przenośny pomiędzy wersjami Linuksa i może powodować problemy z odtwarzaniem dźwięku niezsynchronizowanego między wyjściami. Zamiast tego sugerowałbym użycieomxplayer -o both
do przesyłania dźwięku do dwóch oddzielnych urządzeń, ale ponieważ zostało to przetestowane tylko na RPi z podłączonym wyjściem HDMI i Audio, nie do końca używana przez OP konfiguracja wymagała czegośalsa
.Jest też fajny blog na temat konfiguracji wielu użytkowników kart dźwiękowych alsa multi, które możesz przejrzeć; być może masz błąd, który sprawi, że mój powyższy kod stanie się spornym punktem; zwróć uwagę, że przewodnik był skierowany do Slakera o smaku Linuksa, a nie Raspbian.
źródło