एक साथ कई ध्वनि उपकरणों के लिए ऑडियो आउटपुट


10

मैं अपने RasPi को बोर्ड ऑडियो आउट पोर्ट पर अपने ऑडियो भेजना चाहता हूं, और अपने डिजिटल आउट कार्ड (I2S Hifiberry Digi) को भी। यह ALSA के साथ संभव होना चाहिए। मेरे पास ड्राइवर लोड हैं और दोनों ध्वनि उपकरणों को व्यक्तिगत रूप से भेज सकते हैं, लेकिन उन्हें संयोजन केवल काम नहीं कर रहा है। ऐसा करने के तरीके के बारे में बताते हुए कई पोस्ट हैं, लेकिन मैं अपने काम करने के लिए कॉन्फ़िगर नहीं कर सकता।

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

"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

"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`

/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
}

मुझे लगता है कि आपको पल्सेडियो में देखना चाहिए। लेकिन मैं यहाँ गलत हो सकता हूँ
गेर्बेन

3
मैंने पल्सीडियो में देखा है। मेरा अनुभव यह था कि यह मूल रूप से काम नहीं करता था।
क्रिस्टी

आगे की जांच के बाद (और pulseaudio के साथ एक दूसरा प्रयास), मुझे लगता है कि समस्या यह है कि इस तरह की सुविधा के लिए साउंड कार्ड मेमोरी और / या एमएमएपी समर्थन की साझा पहुंच की आवश्यकता होती है। RasPi I2S ड्राइवर इसका समर्थन नहीं करता है। मैं वास्तव में इसकी पुष्टि नहीं कर सकता, क्योंकि ALSA या पल्सएडियो से कोई विशेष रूप से उपयोगी डिबगिंग जानकारी नहीं है - सामान्य रूप से, सब कुछ तब तक काम करता है जब तक आप कई ध्वनि स्रोतों को संलग्न करने का प्रयास नहीं करते हैं। मैं अनिश्चित हूं कि यह रास्पनी गुठली में तय किया जाएगा या नहीं, लेकिन इसे ठीक करने की कोशिश कर रहा हूं कि मैं निवेश करने के लिए तैयार होने से ज्यादा समय दूंगा।
क्रिस्टी

मैं केवल pulseaudio को काम करने की कोशिश करने का सुझाव दे सकता हूं , क्योंकि यह वही करने में सक्षम है जो आप करना चाहते हैं (नेटवर्क पर अन्य साउंडकार्ड के विस्तार सहित)।
भूकंप १।

जैसा कि मैंने ऊपर उल्लेख किया है, मुझे पल्सेडियो काम कर रहा था। यह प्रत्येक व्यक्तिगत डिवाइस पर ठीक काम करता है, और तब विफल हो जाता है जब आप एक साथ कई आउटपुट के लिए एक स्ट्रीम बनाने का प्रयास करते हैं। मेरा मानना ​​है कि रासपी I2S ड्राइवर में मेमोरी मैपिंग की कमी अपराधी है, लेकिन आगे डिबगिंग अनिवार्य रूप से ALSA और / या पल्सेडियो की आंतरिक संरचना को सीखना होगा, जो मेरे पास करने के लिए समय या झुकाव नहीं है।
क्रिस्टी

जवाबों:


1

यह थोड़ा हैकी है लेकिन क्या आपने teeकमांड पर विचार किया है ? टी-री-दिशा पर स्टैकएक्सचेंज पर अधिक पढ़ें और अधिक उदाहरणों के लिए विकी की कलात्मक देखें । मैं सोच रहा हूं कि यदि आपके पास एक कमांड है जो फ़ाइल नाम या मीडिया सामग्री के लिंक को आउटपुट करता है, तो lsशायद, और teeअपने पसंदीदा मीडिया प्लेयर को कमांड कॉल करने के लिए उपयोग करें। यहां बताया गया है कि मैं समस्या के बारे में कैसे लिखूंगा ...


#!/bin/bash
MediaPlayer="$1"
MediaOptions1="$2"
MediaOptions2="$3"
InputParcer="ls $4"
${InputParcer} | tee >(${MediaPlayer} ${MediaOptions1}) >(${MediaPlayer} ${MediaOptions2}) || echo 'Exiting baddly'

टिप्पणियाँ:

उपरोक्त हार्ड-कोडिंग के लिए प्रत्येक आउट-पुट फोर्किंग के लिए विकल्प चुनने के लिए हार्ड कोडित किया जा सकता है और InputParcerअगर आपको एक निर्देशिका या वेब लिंक प्रस्तुत करने की योजना है, जिसमें एक से अधिक मीडिया फ़ाइल हैं , तो चर को संपादित किया जाना चाहिए। लेकिन एक समय में एक फ़ाइल दोनों को आउटपुट करना चाहिए अगर MediaOptions1/2 या तो हार्ड कोडित है या प्रत्येक रन पर सेट है। यह थोड़ा हैकी है, आपको चेतावनी दी गई है।

... परीक्षण के बाद और इस तरह मैं if [ ${#} < 4]; then echo "error"; fiशीर्ष के पास टॉस की संभावना रखता हूं ; 4कितने तर्कों के लिए संपादन करना मुझे लगा है कि वहाँ रहने की आवश्यकता है। जैसा कि यह चल रहा bash scripted_dule_player 'aplay <common_options>' '<options_output1>' '<options_output2>' '</full/file/path/to/mediafile>'है कि आपके सिस्टम को आपके द्वारा चलाए जा रहे विकल्पों और फ़ाइल रास्तों के लिए संशोधित करना सुनिश्चित होगा ; के बीच का सामान <>

उपयोग करने के साथ समस्या teeयह है कि यह लिनक्स के स्वादों के बीच बहुत अधिक उपयोगी नहीं है और यह आउटपुट के बीच ऑडियो नहीं खेलने के कारण समस्याएँ पैदा कर सकता है। इसके बजाय मैं omxplayer -o bothदो अलग उपकरणों के लिए ध्वनि उत्पादन के लिए उपयोग करने का सुझाव दूंगा, लेकिन जैसा कि यह केवल एक आरपीआई पर परीक्षण किया गया है जिसमें एचडीएमआई और ऑडियो आउट प्लग किया गया है, न कि ओपी और ओपी द्वारा उपयोग किए जाने वाले सेटअप ने कुछ के लिए अनुरोध किया है alsa

अलसा मल्टी साउंड कार्ड बहु उपयोगकर्ता विन्यास के विषय पर भी एक अच्छा ब्लॉग है जिसे आप देखना चाहते हैं; शायद आप में एक त्रुटि है कि मैं अपने उपरोक्त कोड को एक मूट बिंदु अवरुद्ध कर दूंगा; बस ध्यान दें कि वहां जो गाइड था वह स्लेकर फ्लेवर वाले लिनक्स की ओर बढ़ा था न कि रास्पियन।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.