Obtenir le nom complet d'un appareil waveIn
J'ai été en utilisant waveInGetDevCaps pour obtenir le nom de waveIn les appareils, mais le WAVEINCAPS structure prend uniquement en charge les 31 caractères plus une valeur null, ce qui signifie que sur mon ordinateur, les noms de périphérique je serai de retour sont tronqués:
Microphone / Line In (SigmaTel
Microphone Array (SigmaTel High,
Je suis sûr qu'il doit y avoir un moyen de le nom de l'appareil, mais personne ne sait ce que c'est?
Vous devez vous connecter pour publier un commentaire.
Oui, il y a une solution de contournement. J'ai résolu ce problème à plusieurs reprises dans le code de la navigation.
Énumérer les périphériques de capture audio avec DirectSoundCapture. L'API est DirectSoundCaptureEnumerate. Il sera de retour, vous avez le nom complet de l'appareil.
Bien sûr, vous pensez sans doute "C'est très bien, mais le reste de mon code est configuré pour utiliser la Vague de l'API, et non DirectSound. Je ne veux pas basculer dans tous les coins. Alors, comment puis-je carte le GUID Id retourné par DirectSoundCaptureEnumerate à l'entier Id utilisé par le WaveIn API?"
La solution est de CoCreateInstance pour la DirectSoundPrivate objet (ou d'appel GetClassObject directement à partir de dsound.dll) pour obtenir un pointeur vers un IKsPropertySet interface. À partir de cette interface, vous pouvez obtenir le DSound GUID à la Vague ID de mappage. Pour plus de détails, voir cette page web:
http://msdn.microsoft.com/en-us/library/bb206182(SV.85).aspx
Vous souhaitez utiliser le DSPROPERTY_DIRECTSOUNDDEVICE_WAVEDEVICEMAPPING comme décrit sur la page web énumérés ci-dessus.
J'ai terminé les noms de waveIn appareils, en explorant les noms renvoyés par MMDeviceEnumerator. Pour chaque waveIn de l'appareil, lorsque le nom inachevées fait partie du nom complet de l'un des EnumerateAudioEndPoints, j'ai utilisé ce nom pour remplir combobox dans le même ordre d'waveIn appareils.
VisualBasic .NET:
Améliorée plein/C# WPF code basé sur @Andrea Bertucelli réponse
Ressemble DirectSoundPrivate a certaines questions. Je suis en train d'essayer d'accéder à partir d'un projet vide et il fonctionne très bien. Cependant, lorsque j'essaie d'accéder à partir d'une DLL COM ou à partir d'une DLL fil, elle retourne
E_NOTIMPL
erreur deIKsPropertySet::Get
.Mais j'ai pensé à un autre truc. Il semble DirectSound énumère de capture et de rendre les périphériques dans la vague de l'id de la commande (à l'exclusion de la première par défaut).
Nous avons encore à interagir avec les anciennes Vagues d'API et il manque encore une bonne façon de le faire. DirectShow fournit des périphériques d'entrée audio basé sur WaveIn et j'ai besoin d'obtenir un correspondant WASAPI id et vice-versa.
Il y a un moyen impliquant le registre qui est plus simple que d'utiliser DirectSound. Si vous utilisez le WAVEINCAPS2 structure, il a un nom GUID qui fait référence à une clé HKLM\System\CurrentControlSet\Control\MediaCategories. Si la clé n'existe pas, alors il suffit d'utiliser le nom de la structure. Ceci est documenté sur http://msdn.microsoft.com/en-us/library/windows/hardware/ff536382%28v=vs.85%29.aspx. Voici un exemple:
J'ai trouvé une autre manière, en utilisant le registre pour rechercher des appareils audio nom complet, à la fois d'Entrée et de Sortie.
Fonctionne sur Windows 7 et Windows 10.
Cette méthode tente Adam M. l'approche de la première place. Sa méthode ne fonctionne pas pour moi, mais juste au cas où cela fonctionne pour vous, j'ai ajouté comme méthode préférée.