Comment puis-je traiter l'entrée de microphone en temps réel?
Je suis en train de créer une preuve de concept pour une idée que j'ai, et à ce stade, j'ai besoin de quelques conseils sur la manière dont je devrais commencer.
J'ai besoin d'exemple de l'entrée microphone, et un processus de signal en temps réel (pensez à l'Auto-Tune, mais d'un travail en direct), par opposition à "l'enregistrement").
Ce que je fais est "une sorte de" une "entrée micro vers MIDI converter", il se doit donc de réagir assez vite.
J'ai étudié un peu, et apparemment, le chemin à parcourir est soit DirectSound ou la WaveIn* fonctions de l'API. Maintenant, d'après ce que j'ai lu, le WaveIn Api me permettra de remplir une zone tampon d'une certaine taille, qui est très bien pour de l'enregistrement et de post-traitement, mais je me demandais... Comment dois-je faire le traitement en temps réel?
Dois-je utiliser 10ms tampons et de garder une circulaire 50ms ou 100ms de la matrice de moi-même, et j'ai une fonction qui déclenche l'analyse de toutes les 10ms? (qui a accès à la dernière 100ms de l'entrée, dont seulement 10 ms sont nouveaux)
Suis-je manqué quelque chose?
Aussi, comment est-ce fait avec DirectSound? Est-il me donner des capacités améliorées au cours de la régulièrement des Api Win32?
OriginalL'auteur Daniel Magliola | 2008-11-03
Vous devez vous connecter pour publier un commentaire.
Les deux DirectSound et la Vague de l'API en fin de compte vous donner des tampons remplis avec les données audio que vous pouvez traiter. La taille de ces tampons peuvent être variées, mais de façon réaliste, vous aurez besoin de garder une latence de moins de 10mS utile pour le traitement en temps réel. Cela signifie que le traitement des données au sein de 10mS de arrivant au le tampon, moins le temps entre l'arrivée du matériel audio et arriver à le tampon, qui dépend du pilote. Pour cette raison, je recommande le traitement de 5mS de données à la fois.
L'architecture différence entre les deux est que, avec DirectSound vous allouer un buffer circulaire, qui est ensuite rempli par le DirectSound pilote audio alors que la Vague de l'API prend une file d'attente de pré-alloués WAVEHDR tampons qui sont remplis, retourné à l'application et puis recyclés. Il existe plusieurs méthodes de notification pour les deux Api, comme la fenêtre de messages ou d'événements. Cependant, pour de faibles temps de latence de traitement, il est probablement préférable de maintenir un dédié streaming fil et attendre de nouvelles données arrivent.
Pour diverses raisons, je recommande DirectSound sur la Vague de l'API pour nouveau développement, il sera certainement plus facile d'obtenir un temps de latence inférieur.
Quelle que soit la méthode que vous choisissez de faire la saisie, une fois que vous avez vos données, il vous suffit de le passer à votre algorithme de traitement et d'attendre le prochain de la mémoire tampon pour être prêt. Aussi longtemps que vous pouvez traiter les données plus rapidement qu'il arrive, alors vous aurez votre (pseudo) analyse en temps réel.
Il existe également d'autres Api qui peut être plus approprié. Jetez un oeil à ASIO, Kernel Streaming (pour XP uniquement - je n'aurais pas pris la peine) et, de nouveau dans Vista, la Core Audio Api.
Si je comprends bien, la raison pour DirectSound avoir potentiellement plus faible temps de latence, c'est qu'il est capable de faire un direct DMA copie à l'utilisateur du tampon - la Vague de l'API ne le fait pas, et exige une autre copie entre les deux. Aussi, lors de l'utilisation de la Vague API, vous ne pouvez pas prendre le contrôle exclusif du matériel qui peut signifier que kmixer commence à faire des conversion du taux d'échantillonnage ou de la profondeur de bits de conversion. L'ensemble de ce traitement supplémentaire s'ajoute, mais, d'accord, il peut ne pas être significative par rapport à la inhérente de mise en mémoire tampon de la latence. Ces facteurs peuvent aussi changer avec la version de l'OS.
OriginalL'auteur Stu Mackellar
Voici un lien vers un programme (avec la source) en C++, qui n'temps réel l'analyse de la fréquence.
OriginalL'auteur Bork Blatt