2011-11-17 14 views
7

मैं एक पीसीएम डिवाइस पर ALSA का उपयोग करके कुछ ऑडियो डेटा प्लेबैक करना चाहता हूं। उदाहरण के तौर पर मैंने this sample example डाउनलोड किया है और इसे अपने पीसी में चलाया है। यह ठीक काम करता है जब कोई अन्य प्रक्रिया वर्तमान में ध्वनि कार्ड का उपयोग नहीं कर रही है। लेकिन यह कुछ भी नहीं चलता है जब किसी अन्य प्रक्रिया ऑडियो डिवाइस का उपयोग करता है (यानी, मीडिया गीत खेलने खिलाड़ी) और शो त्रुटि निम्न -ALSA: साझा मोड में एक पीसीएम डिवाइस खोलें

Playback open error: Device or resource busy 

इस उदाहरण के स्रोत कोड को देखते हुए मैं कह सकते हैं कि snd_pcm_open समारोह लाइन 882 पर इस त्रुटि को फेंक रहा है। यह डिवाइस व्यस्त है क्योंकि वर्तमान में एक और प्रक्रिया इसका उपयोग कर रही है।

मैंने रिवर्स तरीके से भी कोशिश की - पहली बार उदाहरण शुरू किया, फिर एक गीत शुरू करने का प्रयास किया। इस मामले में मीडिया प्लेयर निष्क्रिय रहता है, प्रगति पट्टी के बगल में "निष्क्रिय" दिखा रहा है (मैं बंशी का उपयोग कर रहा हूं)। मुझे लगता है कि snd_pcm_open डिवाइस संसाधन का अनन्य अधिकार प्राप्त करता है ताकि कोई अन्य प्रक्रिया इसका उपयोग न कर सके।

लेकिन मुझे यह नहीं चाहिए। मैं किसी विशेष डिवाइस की आवश्यकता के बिना ऑडियो डिवाइस पर ध्वनि बजाना चाहता हूं ताकि पीसी में अन्य प्रक्रियाएं ऑडियो डेटा को आउटपुट करने के लिए एक ही डिवाइस साझा कर सकें।

मैं यह कैसे कर सकता हूं? मैं एक पीसीएम डिवाइस कैसे खोल सकता हूं ताकि अन्य प्रक्रियाएं एक ही डिवाइस को साझा कर सकें?

उत्तर

3

मैं कई प्रक्रियाओं के बीच एक उपकरण साझा करने के लिए एक रास्ता नहीं मिल सका। मैंने .asoundrc कॉन्फ़िगरेशन फ़ाइल का उपयोग करके एकाधिक प्लेबैक स्ट्रीम को गठबंधन करने के लिए dmix प्लगइन का उपयोग करने का प्रयास किया लेकिन यह किसी कारण से काम नहीं करता था। मैंने अपने साउंड कार्ड के default डिवाइस का उपयोग करने की कोशिश की लेकिन यह भी काम नहीं किया। एएलएसए मेलिंग सूची में एक सिफारिश के मुताबिक मैंने default:CARD=x का उपयोग कर डिवाइस नाम पैरामीटर के रूप में snd_pcm_open फ़ंक्शन के रूप में डिफ़ॉल्ट डिवाइस खोलने का प्रयास किया जिसके परिणामस्वरूप मेरे सिस्टम में device not found त्रुटि हुई। जाहिर है ऐसा करने का कोई तरीका नहीं है (अगर कोई रास्ता ढूंढ सकता है, तो कृपया इस उत्तर को अपडेट करें)।

ALSA का उपयोग करने के बजाय, मैंने PulseAudio का उपयोग किया जिससे मेरी समस्या हल हो गई।

1

फ़ाइल/dev/sndstat (यदि आपके पास ओएसएस संगतता परत सक्षम है) की जांच करें। यह ऑडियो उपकरणों को सूचीबद्ध करना चाहिए जो आपके सिस्टम पर एएलएसए उपकरणों से मेल खाते हैं। और आप प्रत्येक डिवाइस की विशेषताओं को प्राप्त करने के लिए/proc/asound/devices भी देख सकते हैं। विभिन्न प्लेबैक उपकरणों के लिए

कोशिश एक्सेस (अपने उदाहरण में यह "plughw: 0,0" है खोला) snd_pcm_open लिए अलग अलग नाम का चयन करके(): यह here से है:

plughw: कार्ड, डिवाइस। दोनों में पैरामीटर कार्ड (आईडी स्ट्रिंग या न्यूमेरिकल इंडेक्स), डिवाइस और वैकल्पिक रूप से एक्सेस किए जाने वाले हार्डवेयर के उप-विभाजन के रूप में हैं।

+0

नहीं, मेरे पास ओएसएस संगतता परत सक्षम नहीं है, और मैं वास्तव में इस पर भरोसा नहीं करना चाहता हूं। मैंने भी/proc/asound/devices की जांच की और वहां डिवाइस सूची देखी (हालांकि मैं उस सूची को प्रोग्रामेटिक रूप से ला सकता हूं)। मैं विभिन्न प्लेबैक उपकरणों तक भी पहुंच सकता हूं। लेकिन इनमें से कोई भी वास्तव में यहां मुद्दा नहीं है। मैं जानना चाहता था कि क्या मैं साझा मोड में एक ही डिवाइस खोल सकता हूं। –

1

एएलएसए के साथ समस्या तब डिफ़ॉल्ट आउटपुट में डाली गई मिक्सर प्लगइन की अनुपस्थिति थी। एएलएसए के हाल के संस्करणों में, यह अब और नहीं होता है क्योंकि डीएमआईक्स प्लगइन अब डिफ़ॉल्ट रूप से आउटपुट पथ में शामिल है।

(आप अपने आप के लिए साझा soundcard मुसीबत ~/.asoundrc साथ अगर आप गंदगी को पुन: कर सकते हैं, या आप सीधे हार्डवेयर प्लग का उपयोग करने के आवेदन बताकर मिक्सर बाईपास यदि।ध्यान दें कि जेएक्स जैसे कुछ एप्लिकेशन हार्डवेयर को सीधे अन्यथा करने के लिए नहीं कहा जाने पर हार्डवेयर का उपयोग करने का प्रयास करेंगे।)

पल्सऑडियो के साथ, आप अभी भी एएलएसए का बैकएंड के रूप में उपयोग करते हैं, आपने अभी मिक्सर के साथ एक परत जोड़ा है (और एक टन अन्य चीजें जिन्हें आप शायद यहां तक ​​कि जानना नहीं चाहते हैं)। जैक आपके लिए बिल्कुल वही काम करेगा।

आजकल, एएलएसए की डीएमआईक्स प्लगइन आपके लिए यह करेगा, इसलिए आप पल्सऑडियो और जैक्स जैसे मिडलवेयर से छुटकारा पा सकते हैं जब तक आपको वास्तव में गैर-मूल ध्वनि प्रणाली सुविधाओं की आवश्यकता न हो।

संदर्भ के लिए, some .asoundrc documentation देखें।

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