2009-12-08 25 views
5

Comment puis-je connaître les capacités des périphériques ALSA sans devoir d'abord ouvrir le périphérique? Le problème est, je dois fournir les paramètres à la fonction snd_pcm_open() pour utiliser les fonctions de test qui me paraissent stupides. Pourquoi demander s'il s'agit d'un périphérique de lecture ou d'enregistrement si je dois d'abord le signaler à la fonction ouverte? Par exemple, je voudrais énumérer tous les appareils de lecture, mais la seule façon que je peux penser est d'essayer d'ouvrir tous les appareils que je trouve (avec snd_device_name_hint()) et essayer de les ouvrir en mode lecture et si je parviens à ouvrir , tout va bien.Comment connaître les fonctionnalités des périphériques audio ALSA par programmation sous Linux sans ouvrir le périphérique

Le problème est, avec toutes les variations possibles (taux d'échantillonnage, canaux, etc.), il y aurait un grand nombre d'open() que j'ai besoin d'effectuer pour trouver les paramètres.

Répondre

6

Utilisez snd_ctl_next itérer sur tous les appareils, snd_ctl_open alors obtenir des informations sur l'appareil - ce n'est pas la même chose que snd_pcm_open, ce qui pourrait échouer si un autre programme a l'appareil ouvert ou si vous avez de mauvais paramètres.

C'est assez dense, mais voici un peu de code open-source qui itère sur tous les périphériques ALSA que vous pouvez consulter: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c - recherchez BuildDeviceList pour commencer.

-1

Vous pouvez exécuter une commande shell. Alors aplay est votre ami.

http://alsa.opensrc.org/Aplay

aplay -l

liste toutes les cartes son et audio numérique appareils

+6

Cela ne me dit pas tout ce que je ne sais pas snd_device_name_hint(). Il ne semble pas indiquer, par exemple, quels taux d'échantillonnage chaque appareil prend en charge. De plus, je ne dirais pas qu'il est très simple d'appeler cela à partir du code C et de gérer la sortie même si elle a produit les informations dont j'ai besoin ... – Makis

0

C'était mes premières exigences à un projet Linux/Unix où j'ai besoin de connaître toutes les capacités des périphériques audio disponibles. Ensuite, j'ai besoin d'utiliser ces appareils pour capturer et lire l'audio. Ce que j'ai fait est assez simple. Il y a une commande linux/unix qui est utilisée pour trouver les périphériques via alsa utility sous linux.

Il est:

aplay -l 

Maintenant, ce que je faisais est de faire juste un programme pour donner comme comme ce que par ALSA.

Pour l'aide de tout le monde j'ai fait une bibliothèque (.so) et un exemple d'application démontrant l'utilisation de cette bibliothèque en C++.

La sortie de ma bibliothèque est comme-

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

Cette bibliothèque peut également capturer et lire les données audio en temps réel.

Il est disponible avec la documentation dans IdeaAudio library with Duplex Alsa Audio