Gestion de l'accès à l'entrée microphone et le volume du système
Je suis à la recherche de faire trois choses:
Accéder aux données à partir du microphone. Vraiment tout ce que je veux savoir, c'est le volume général du son capté par l'appareil.
Régler le gain du microphone.
Régler le volume du système.
Toutes mes fenêtres expérience de développement C#/WPF, alors j'aimerais séjour réussi. Je n'ai pas besoin exceptionnellement élevé de performance ou de traitement en temps réel ou quoi que ce soit.
J'ai regardé autour et il semble que SlimDX pourrait être une bonne wrapper pour cela, mais même là, je ne suis pas sûr où commencer.
Sûrement, il ne peut pas être si difficile que ça?
Sûr qu'il peut. 🙂
OriginalL'auteur Josh Santangelo | 2009-07-28
Vous devez vous connecter pour publier un commentaire.
Voici un lien qui montre comment accéder à la table de mixage audio dans Windows à partir de C#:
http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931
Cela vous permettra de régler le gain du microphone et le volume du système. La première partie est un peu plus compliqué, cependant. Fondamentalement, vous avez besoin pour commencer l'enregistrement de l'entrée (à l'aide de DirectSound ou la waveInXXXX API [mon favori personnel]). Comme chaque tampon est rempli avec de l'audio, vous pouvez calculer la Moyenne quadratique de la mémoire tampon et de l'utiliser pour estimer le volume.
Modifier: voici un lien vers un projet (que j'ai utilisé et modifié avec succès, donc je sais que ça fonctionne) qui montre comment enregistrer de l'audio à l'aide de la waveInXXXX API:
http://www.codeproject.com/KB/audio-video/cswavrec.aspx?df=90&fid=16677&mpp=25&noise=3&sort=Position&view=Quick&select=3005817
Edit 2: et depuis j'en ai marre de poster des liens, voici une formule pour le calcul de la Moyenne quadratique de la mémoire tampon audio (le type est ici float[], mais il peut être facilement modifié pour gérer court[], qui est ce que vous devriez normalement obtenir à partir de waveInXXXX):
Lequel? La première ou la deuxième?
Pourquoi le float tableau de paramètre ref ? ne devrait pas la valeur assez ?
btw, +1 pour la formule
J'écris beaucoup de fonctions qui prennent des float[] les tableaux comme paramètres. Habituellement, les fonctions de modifier le tableau existant, mais parfois ils soit de modifier l'existant ou en créer un nouveau et plus grand tableau, en fonction de ce que je fais (reverb est un exemple). J'ai passer de l'entrée de ref pour ce faire, il est juste devenu une habitude. Vous avez raison, cette fonction ne fonctionne très bien sans le mot-clé ref.
OriginalL'auteur MusiGenesis
Malheureusement, vous ne pouvez pas lire de manière fiable (ou rendre) données provenant de la gestion de code, sauf si vous êtes prêt à vivre avec sérieux le temps de latence (de l'ordre de 5 seconde). Le problème est que le CLR pouvez interrompre votre processus de 250 millisecondes à un moment, sans avertissement. Normalement, ce n'est pas grave, mais quand vous essayez de faire les isochrones de traitement, il peut être un problème important.
Vous ne pouvez pas avoir de manquer de mémoire ou déclenché un cycle de GC. Elle dépend aussi de quel système d'exploitation vous êtes en cours d'exécution sur. Sur Vista, la vague Api ont environ 100ms de latence qui rend de plus en plus résilient aux parasites. Sur XP et Win7 ils courent avec environ 30 ms de latence qui est plus susceptible de souffrir des problèmes.
Je suis sous Vista. Merci, c'est quelque chose de bon à savoir. Mon synthé logiciel ne le fait pas en temps réel, mais j'envisage l'écriture d'une version qui n'. Ce genre de latence le rendrait presque impossible (je suis en supposant que les temps de latence s'appliquent à waveOut*?), étant donné que mon son processus de génération est déjà relativement élevé.
Je pense que parce que vous êtes à l'aide de P/Invoke et ne sont pas gérées de bibliothèques, ce n'est pas pour autant une question... à moins que je me trompe et dans ce cas, quelqu'un merci de me corriger.
L'appel lui-même ne sera pas retardée, car il est non géré, mais la manipulation de la suite qui pourrait être...
OriginalL'auteur Larry Osterman
Vous pouvez utiliser NAudio pour capturer l'audio à partir du microphone dans le C#. Jetez un oeil à la démo de projets pour des exemples de la façon de faire. Comme Larry points ci-dessus, ne pas s'attendre à une grande latence. NAudio a également géré des wrappers pour la table de mixage Api qui devrait vous permettent de régler le volume du microphone, mais il peut être difficile d'obtenir le contrôle correct de la programmation.
OriginalL'auteur Mark Heath
J'ai juste écrit une (très basique) exemple de code sur la façon de capturer le son provenant du microphone à l'aide de SlimDX. J'espère que cela aide si vous êtes toujours à la recherche d'une réponse.
OriginalL'auteur