Le traitement du signal en temps réel est-il possible sous Windows?


8

Cette question est liée à Comment décider sur quelle plateforme est la meilleure pour implémenter le traitement audio en temps réel? , mais en se concentrant sur Windows.

J'aimerais pouvoir prendre des données sur une carte d'acquisition de données et les traiter (via Matlab ou un programme personnalisé) et utiliser le résultat de ce programme pour piloter un périphérique externe connecté via USB. Je sais qu'il est presque impossible d'obtenir des réponses difficiles en temps réel avec Windows (car il y a un "tremblement" (terme technique) de 3 à 15 ms).

Quelle est la façon la plus efficace de réduire ce temps de mouvement? Est-ce possible? Dois-je rechercher immédiatement une solution embarquée?

Réponses:


4

Windows n'est pas un système d'exploitation en temps réel, donc vous n'avez pas de vraies capacités de traitement en temps réel dans Windows.

Avec Windows Vista, Microsoft a proposé une nouvelle API qui, entre autres, visait des performances strictes, où les flux en mode exclusif promettaient des performances proches du temps réel. Ceci est réalisé avec quelques éléments puissants travaillant ensemble, y compris un chemin court et exclusif vers le matériel audio à partir des composants en mode utilisateur, une planification multimédia spécifique. Permettez-moi de citer Wiki à ce sujet:

Pour les professionnels de l'audio, un nouveau pilote de port WaveRT a été introduit qui s'efforce d'atteindre des performances en temps réel en utilisant le planificateur de classe multimédia et prend en charge les applications audio qui réduisent la latence des flux audio. Par conséquent, les applications en mode utilisateur peuvent régir complètement les flux audio sans aucune exécution de code dans le noyau pendant l'exécution. WaveRT permet à l'application en mode utilisateur d'accéder directement aux tampons matériels audio internes et aux compteurs de position d'échantillons (données dans la mémoire qui sont mappées au moteur DMA du matériel audio). Il permet aux applications d'interroger la position actuelle dans la fenêtre de mémoire DMA à laquelle le matériel accède. WaveRT prend également en charge la notion d'événement de notification d'horloge généré par le matériel, similaire à l'API ASIO, afin que les applications n'aient pas besoin d'interroger la position actuelle si elles ne le souhaitent pas. WaveRT ne fonctionne cependant qu'avec des périphériques audio PCI, PCI Express ou embarqués; il ne fonctionne pas avec les interfaces USB ou FireWire qui sont plus répandues dans l'industrie audio professionnelle.

Ce nouveau mode de fonctionnement a ouvert des opportunités intéressantes pour le traitement audio à faible latence, telles que rapportées par des utilisateurs satisfaits :

J'obtiens un son parfaitement stable et solide avec des tampons de 2 ms + une latence de 0,5 ms, comparé à un audio semi-stable dans des tampons de 4 ms (+ 5 ms de latence de sortie), avec ASIO.

Selon que cette approximation en temps réel vous convient, Windows peut toujours être un bon environnement pour la tâche mentionnée.


9

si vous avez besoin de garder la gigue (en supposant que c'est ce que vous entendez par "bouger" :) jusqu'à <1 ms, je dirais oublier Windows. La latence absolue de l'entrée à la sortie est-elle importante ou s'agit-il uniquement de la gigue?

Vous pouvez parfois le gérer, mais il est peu probable qu'il soit garanti . Quelle est la sanction pour ne pas avoir respecté le délai? Cela fera-t-il exploser les haut-parleurs? Conduire un bras de robot trop fort contre une butée? Ou quelque chose de plus bénin?

Le fait que votre sortie soit USB n'est pas non plus susceptible d'aider dans les enjeux de gigue, car il y a beaucoup d'interaction supplémentaire avec le système d'exploitation, et la topologie du bus entravera également votre latence potentielle - si votre sortie est à la fin d'une chaîne de quelques hubs, par exemple.


Oui, la gigue était le terme que je recherchais, merci.
jonsca

5

Que cela soit possible ou non dépend de vos besoins de latence, c'est-à-dire du retard total entre l'entrée et la sortie. Un bon point de départ pourrait être la mise en place d'une station de travail audio numérique à l'aide de logiciels d'enregistrement tels que ProTools, Sonar, Ableton, Cubase, etc. Ceux-ci fonctionnent avec du matériel d'E / S peu coûteux (en quelque sorte) et sont livrés avec des pilotes optimisés à faible latence. Certains d'entre eux ont des interfaces "plug-in" qui vous permettent de boucler dans votre propre traitement du signal. Un format populaire est VST de Steinberg qui est pris en charge par de nombreux hôtes. Il était auparavant ouvert et gratuit mais peut nécessiter une licence maintenant.

Ce http://www.kvraudio.com/wiki/ est une bonne ressource pour ce genre de chose.

Si vous souhaitez traiter dans Matlab, vous devrez peut-être écrire vos propres pilotes. J'ai vu cela avec des DLL et des interfaces natives JAVA. Vous pouvez également pirater quelque chose avec audioplayer () et audiorecorder (), mais ceux-ci peuvent nécessiter une latence assez élevée pour gérer les interruptions de Windows et faire d'autres choses. En substance, vous configurez un contrôle GUI avec un rappel qui est déclenché à une heure. Dans le rappel, vous lisez toutes les entrées disponibles, les traitez, les insérez dans la sortie et espérez le meilleur.

En général, cela aide à garder la boîte Windows aussi "propre" que possible, c'est-à-dire pas de connexion réseau (pendant que vous traitez l'audio), pas de logiciel anti-virus et ne lancez que le minimum absolu des éléments de démarrage, des logiciels et des services.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.