كيفية معرفة قدرات جهاز الصوت ALSA برمجيا في Linux دون فتح الجهاز

StackOverflow https://stackoverflow.com/questions/1866673

  •  18-09-2019
  •  | 
  •  

سؤال

كيف يمكنني معرفة قدرات أجهزة ALSA دون فتح الجهاز أولا؟ المشكلة هي، أحتاج إلى توفير المعلمات إلى snd_pcm_open() وظيفة لاستخدام وظائف الاختبار التي بالنسبة لي هي سخيفة. لماذا تسوء ما إذا كان هذا هو تشغيل أو جهاز تسجيل إذا كان علي أن أخبره بالوظيفة المفتوحة أولا؟

كمثال، أود سرد جميع أجهزة التشغيل ولكن الطريقة الوحيدة التي يمكنني التفكير فيها هي محاولة فتح كل جهاز أجده (مع snd_device_name_hint()) وحاول فتحها في وضع التشغيل وإذا تمكنت من فتح، كل شيء على ما يرام.

المشكلة هي، مع كل الاختلافات الممكنة (معدل العينة، القنوات، إلخ) سيكون هناك عدد كبير كبير من العراء () أحتاج إلى أداء لمعرفة المعلمات.

هل كانت مفيدة؟

المحلول

استخدم SND_CTL_NEXT للتكرار فوق جميع الأجهزة، ثم SND_CTL_OPEN للحصول على معلومات حول الجهاز - هذا ليس هو نفسه SND_PCM_OPEN، مما قد يفشل في حالة فتح برنامج آخر أو إذا كان لديك إعدادات سيئة.

انها كثيفة للغاية، ولكن هنا بعض التعليمات البرمجية مفتوحة المصدر التي تشكك في جميع أجهزة ALSA التي يمكنك إلقاء نظرة عليها: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c. - البحث عن BuildDevicelist للبدء.

نصائح أخرى

كانت أول متطلباتي الأولى لمشاريع Linux / UNIX حيث أحتاج إلى معرفتها حول جميع قدرة الأجهزة الصوتية المتاحة. ثم أحتاج إلى استخدام هذه الأجهزة لالتقاط الصوت والتشغيل. ما فعلته بسيط جدا. هناك أمر Linux / UNIX يستخدم للعثور على الأجهزة من خلال الأداة المساعدة في Linux.

أنه:

aplay -l

الآن ما فعلته هو مجرد إصدار برنامج لإعطاء مثل هذا من قبل ALSA.

بالنسبة لمساعدة الجميع، قمت بإجراء مكتبة (.so) وتطبيق نموذج يظهر استخدام هذه المكتبة في C ++.

إخراج مكتبتي هو مثل-

[root@~]# ./IdeaAudioEngineTest
HDA Intel plughw:0,0
HDA Intel plughw:0,2

يمكن لهذه المكتبة أيضا التقاط بيانات الصوت في الوقت الحقيقي.

وهي متوفرة مع الوثائق في مكتبة Ideaudio مع دوبلكس Alsa Audio

يوفر لك إجراء أمر Shell. ثم aplay هو صديقك.

http://alsa.opensrc.org/aplay.

aplay -l.

قائمة جميع البطاقات الصوت وأجهزة الصوت الرقمية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top