2009-12-08 8 views
5

डिवाइस को खोलने के बिना मैं ALSA डिवाइस की क्षमताओं को कैसे ढूंढूं? समस्या यह है कि, मुझे परीक्षण कार्यों का उपयोग करने के लिए snd_pcm_open() फ़ंक्शन पर पैरामीटर की आपूर्ति करने की आवश्यकता है जो मुझे मूर्खतापूर्ण है। क्यों पूछें कि क्या यह एक प्लेबैक या रिकॉर्ड डिवाइस है यदि मुझे इसे पहले खुले फ़ंक्शन में बताना है?डिवाइस को खोलने के बिना लिनक्स में ALSA ऑडियो डिवाइस क्षमताओं को प्रोग्रामेटिक रूप से कैसे ढूंढें

उदाहरण के तौर पर, मैं सभी प्लेबैक डिवाइसों को सूचीबद्ध करना चाहता हूं, लेकिन एकमात्र तरीका जिसे मैं सोच सकता हूं, मुझे हर डिवाइस को खोलने की कोशिश कर रहा है (snd_device_name_hint() के साथ) और उन्हें प्लेबैक मोड में खोलने का प्रयास करें और यदि मैं खोलने का प्रबंधन करता हूं , सब कुछ ठीक है।

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

उत्तर

6

उपयोग सभी उपकरणों से अधिक पुनरावृति करने के लिए है, तो डिवाइस के बारे में जानकारी प्राप्त करने के snd_ctl_open - इस snd_pcm_open जैसा नहीं है, जो विफल हो सकता है यदि किसी अन्य प्रोग्राम में डिवाइस खुलता है या यदि आपके पास खराब सेटिंग्स हैं।

यह काफी घना है, लेकिन यहां कुछ ओपन-सोर्स कोड है जो सभी एएलएसए डिवाइसों पर पुनरावृत्त होते हैं जिन्हें आप देख सकते हैं: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c - आरंभ करने के लिए BuildDeviceList की खोज करें।

-1

प्रदान करना आप एक शेल कमांड कर सकते हैं। फिर एपप्ले आपका दोस्त है।

http://alsa.opensrc.org/Aplay

aplay -l

सूची सभी soundcards और डिजिटल ऑडियो उपकरणों snd_ctl_next

+6

में प्रलेखन के साथ उपलब्ध है यह मैं कुछ नहीं बताता है मैं snd_device_name_hint साथ पता नहीं है()। ऐसा प्रतीत नहीं होता है, उदाहरण के लिए, प्रत्येक डिवाइस किस नमूना दर का समर्थन करता है। इसके अलावा मैं यह नहीं कहूंगा कि इसे सी कोड से कॉल करना और आउटपुट को संभालना बहुत आसान है, भले ही यह मुझे आवश्यक जानकारी का उत्पादन करे ... – Makis

0

यह लिनक्स/यूनिक्स परियोजनाओं के लिए मेरी पहली आवश्यकता थी जहां मुझे सभी उपलब्ध ऑडियो डिवाइस क्षमता के बारे में जानने की आवश्यकता है। फिर मुझे ऑडियो को कैप्चर और प्लेबैक करने के लिए इन उपकरणों का उपयोग करने की आवश्यकता है। मैंने जो किया है वह बहुत आसान है। एक लिनक्स/यूनिक्स कमांड है जिसका उपयोग लिनक्स में अल्सा उपयोगिता के माध्यम से उपकरणों को खोजने के लिए किया जाता है।

यह है:

aplay -l 

अब मैं क्या किया बस alsa द्वारा इस रूप में की तरह के रूप में बाहर देने के लिए एक कार्यक्रम बनाने के है।

हर किसी की मदद के लिए मैंने एक (.so) लाइब्रेरी बनाई है और एक नमूना अनुप्रयोग सी ++ में इस लाइब्रेरी के उपयोग का प्रदर्शन करता है।

मेरे पुस्तकालय के उत्पादन

[[email protected]~]# ./IdeaAudioEngineTest 
HDA Intel plughw:0,0 
HDA Intel plughw:0,2 

यह पुस्तकालय भी कब्जा और वास्तविक समय ऑडियो डेटा प्लेबैक कर सकते हैं जैसे है।

यह IdeaAudio library with Duplex Alsa Audio

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