ALSA

2011-08-09 6 views
5

का उपयोग करके एकाधिक पीसीएम स्ट्रीमों को कैसे मिलाएं मेरे पास पीसीएम नमूने के दो अलग-अलग स्ट्रीम हैं। क्या किसी भी तरह से उन्हें एक ही आउटपुट डिवाइस पर मिश्रित करना और ALSA के साथ खेलना संभव है?ALSA

मैंने पढ़ा कि मिक्सर का उपयोग करना संभव हो सकता है लेकिन मुझे दस्तावेज़ीकरण की कमी के कारण समझना मुश्किल हो रहा है। क्या कोई भी इस बारे में कुछ और जानकारी प्रदान कर सकता है कि इसे कैसे कार्यान्वित किया जा सकता है (यदि यह वास्तव में है)?

धन्यवाद!

उत्तर

3

इसके लिए, जांचें कि क्या आपके पास है .asoundrc हमारे सिस्टम को फाइल करें। यदि यह वहां नहीं है, तो एक बनाएं और आप इसे अपने/घर फ़ोल्डर में रख सकते हैं। इन सेटिंग के साथ यह अद्यतन:

pcm.!default { 
       type plug 
       slave.pcm "dmixer" 
} 
pcm.dmixer { 
      type dmix 
     ipc_key 1024 
     slave { 
      pcm "hw:1,0" 
      period_time 0 
       period_size 1024 
      buffer_size 4096 
      rate 44100 
     } 
     bindings { 
      0 0 
      1 1 
     } 
} 
ctl.dmixer { 
     type hw 
     card 0 
} 

उपयोग $aplay -l आपके सिस्टम पर उपकरणों की सूची प्राप्त करने के लिए। एचडब्ल्यू: एक्स, वाई आपके हार्डवेयर के इस मैपिंग से आता है, जहां एक्स कार्ड नंबर है, जबकि वाई डिवाइस नंबर है।

अब, टर्मिनल खोलें, और के साथ अपना पहला पीसीएम धारा खेलने: $aplay -f cd pcm_sound1.wav और अन्य टैब में, अपने दूसरे पीसीएम धारा खेलने: $aplay -f cd -D default pcm_sound2.wav

यह अपने दो पीसीएम डेटा धाराओं मिश्रण होगा।

चीयर्स,

+0

यह उत्तर बहुत उपयोगी है लेकिन मैं थोड़ा उलझन में हूं और अधिक स्पष्टीकरण की सराहना करता हूं। दूसरे 'एप्ले' कमांड में '-D डिफ़ॉल्ट 'क्यों है, लेकिन पहला नहीं है? 'बाइंडिंग्स' सेक्शन का अर्थ क्या है, और 'ctl.dmixer' क्या है? क्या दो से अधिक धाराओं को मिश्रण करना संभव है, उदा। अगर मैं एक साथ तीन 'एप्ले' आदेश चलाता हूं? 'Dmixer' को इंगित करने वाले प्रकार 'प्लग' का" डिफ़ॉल्ट "डिवाइस क्यों है, क्या हम 'pcm.dmixer' को' pcm।! Default 'के रूप में नामित कर सकते हैं और संकेत से बच सकते हैं? – Metamorphic

1

मुझे यकीन है कि अगर यह एक अलग जवाब के हकदार नहीं हूँ। मैंने एचएससी के उत्तर और "ALSA Wiki - The Dmix Howto" पर उदाहरणों का उपयोग किया। डीमिक्स दस्तावेज वास्तव में थोड़ा निराशाजनक है।

यहां एक उदाहरण ~/.asoundrc है जो मेरे लिए काम करता है। "बाइंडिंग" खंड अनावश्यक है, लेकिन हाउटो का कहना है कि यह "मल्टीचैनल चिप्स तेजी से काम करने में मदद करता है" (सुनिश्चित नहीं है कि मुझे परवाह है या नहीं?)। अगर मैं "0 1 1 0" बांधता हूं तो यह दाएं/बाएं चैनल स्विच करता है। अगर मैं "0 1 1 1" बांधता हूं तो मुझे अपने दाहिने कान में कचरा मिलता है ... जाहिर है ipc_key एक आवश्यक पैरामीटर है; मैंने बस एक यादृच्छिक पूर्णांक चुना है।

# example 1 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { 
     pcm "hw:3" 
     period_time 0 
     period_size 1024 # must be power of 2 
     buffer_size 4096 
     rate 44100 
    } 
    bindings { 
     0 0 
     1 1 
    } 
} 

pcm.!default hw3mix 

अंतिम पंक्ति मेरा नया hw3mix डिफ़ॉल्ट डिवाइस बनाती है।

मैं करने के लिए ऊपर सरलीकृत:

# example 2 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { pcm "hw:3" } 
} 

pcm.!default hw3mix 

और यह सिर्फ अच्छा काम करने लगता है।

ऊपर ALSA विकी लिंक पर सुझाव के रूप में, मैं आगे यह करने के लिए आसान बनाने में कर सकते हैं:

# example 3 
pcm.dsp0 { 
    type plug 
    slave.pcm "dmix" 
} 

pcm.!default dsp0 

और इस के लिए आगे सरल किया जा सकता:

# example 4 
pcm.!default { 
    type plug 
    slave.pcm "dmix" 
} 

या यहाँ तक कि:

# example 5 
pcm.!default plug:dmix 

हालांकि, पिछले तीन उदाहरण मुझे डीएमआईक्स प्लगइन के लिए पैरामीटर निर्दिष्ट करने की अनुमति नहीं देते हैं। मैं एक उपकरण बनाना चाहता था जो कई धाराओं को "एचडब्ल्यू: 3" में मिलाता है। मुझे लगता है कि इसे डीमिक्स के पैरामीटर के रूप में निर्दिष्ट किया जाना चाहिए क्योंकि यह डिफ़ॉल्ट डिवाइस नहीं है, इसलिए मैं ऊपर अपने दूसरे उदाहरण के साथ गया।मेरे वास्तविक ~/.asoundrc में, "hw: 0,0" के लिए एक ब्लॉक भी है जिसे "hw0mix" कहा जाता है, इसलिए निम्न पंक्तियों पर टिप्पणियों को बदलकर, मैं अपने हेडफ़ोन और स्पीकर के बीच (नव निर्मित) स्ट्रीम का आउटपुट स्विच कर सकता हूं:

#pcm.!default hw0mix 
pcm.!default hw3mix 

एनबी: और "hw: 3": ऊपर "0,0 hw" जैसे उपकरणों को संदर्भित करता है ... यह थोड़ा पता लगाने के लिए मेरी विभिन्न यूएसबी ध्वनि के लिए स्थिर युक्ति संख्या सुनिश्चित करने के लिए कितना मुश्किल था डिवाइस, मुझे "उसी प्रकार के एकाधिक कार्ड ऑर्डर करने" के तहत निर्देश here मिला। कॉन्फ़िगरेशन में /etc/modprobe.d/ में फ़ाइल में एक पंक्ति होती है। इस तरह रीबूट में एक ही डिवाइस को संदर्भित करने के लिए मुझे 0 और 3 जैसी संख्याएं मिलती हैं।

संबंधित मुद्दे