2009-12-18 20 views
2

J'utilise l'API winmm pour gérer l'audio. J'utilise waveInGetDeviceCaps et waveInMessage pour identifier de manière unique une "ligne audio". Tout fonctionne bien, sauf que dans Vista, le nom de l'appareil est plafonné en 32 caractères par la struct WaveInCaps. Pour contourner cela, je prévois d'utiliser l'api de base lorsque la version du système d'exploitation est> = Vista. J'utilise les IMMDeviceEnumerator.GetDevice et IMMDeviceEnumerator.EnumAudioEndpoints pour rassembler des informations sur les lignes audio, mais je ne suis pas sûr de savoir comment dire qu'un périphérique sous l'API principale correspond à une entrée sous l'API waveXx. Je suppose que je pourrais comparer le chemin de périphérique des deux, mais cela irait à l'encontre de la recommandation de MS de traiter la chaîne de chemin d'accès du périphérique comme "opaque".Est-il possible de relier le même périphérique audio dans différentes API?

Que diriez-vous?

+0

Je pense qu'une autre façon d'aider à répondre à ma question est la suivante: étant donné une instance de IMMDevice, comment puis-je savoir que « l'indice de ligne » (celui que je peux utiliser comme argument pour WaveInOpen par exemple) est lié à cette ligne? –

Répondre

3
+0

Super! Cela m'aidera aussi avec d'autres choses, comme obtenir le guid de ce point de terminaison spécifique. –

+0

Que voulez-vous dire "guid de ce point final"? Voulez-vous dire le DSID GUID? C'est disponible dans PKEY_AudioEndpoint_GUID. Vous pouvez également utiliser http://msdn.microsoft.com/en-us/library/ms790392.aspx DRV_QUERYDEVICEINTERFACE et DRV_QUERYENDPOINTID pour récupérer l'ID de point de terminaison pour un ID d'onde ou de mélangeur donné. –

+0

Droite, ce que je fais déjà pour d'autres raisons. La grande image ici est la suivante: Je développe un cadre multimédia pour capturer le son basé sur l'API waveInXxx. D'abord j'ai dû relier une ligne d'entrée donnée à son périphérique audio (setupAPI), et pour cela j'utilise le DRV_QUERYDEVICEINTERFACE. Le problème que j'ai avec l'API waveInXxx est qu'il tronque le nom de l'appareil sous Vista, donc je fais appel au son direct pour obtenir ce nom complet. –