2017-06-02 1 views
1

Je travaille actuellement sur un programme qui analyse votre voix. J'ai un thread qui exécute WaveInEvent qui enregistre l'audio du micro. Lorsque les données sont disponibles (les événements de l'événement WaveInEventArgs se déclenchent), il les code et les sérialise et les envoie à l'analyseur.À quelle fréquence les gestionnaires WaveInEvent déclenchent-ils?

J'aimerais pouvoir utiliser un fichier audio, disons un .mp3. Je lis comme ceci:

byte[] audioFileBytes = File.ReadAllBytes(audioFilePath); 

Et envoyer ensuite à l'analyseur de la même manière.

Je rencontre quelques problèmes: le fichier audio n'est pas traité à l'autre extrémité - alors que cela fonctionne si j'utilise l'entrée audio "dynamique". Je suppose que cela a à voir avec la longueur du tampon, mais je ne peux pas trouver combien de temps le tampon WaveInEvent est et combien de fois l'événement WaveInEventArgs se déclenche. Deuxièmement, les données sont traitées en ~ 2 secondes, et j'avais l'habitude d'ajouter des horodatages aux données que j'ai reçues du côté de l'analyseur quand je l'ai en temps réel, donc maintenant il ajoute un horodatage pour le fichier entier. Si je l'envoie octet par octet, j'obtiendrai 1,2 million d'horodateurs en environ 2 secondes, ce qui n'est toujours pas imprimable sur un graphique - plus le graphique devrait commencer à 0 et se terminer à la longueur du fichier audio (70 secondes ici pour le test que j'ai), pas à 2 secondes. Donc, dans un premier temps, j'ai pensé à lire le fichier audio "en temps réel" et à envoyer l'audio du fichier comme s'il provenait du microphone, mais je n'ai aucune idée de la façon de le faire.

Ma question se résume à: à quelle fréquence les gestionnaires de WaveInEvent tirent-ils?

Répondre

1

Cela a à voir avec la longueur des tampons. Chaque fois qu'un tampon est rempli avec de l'audio l'événement se déclenchera. Regardez les propriétés BufferMilliseconds et NumberOfBuffers. Vous pouvez les régler aux valeurs souhaitées avant de commencer l'enregistrement.