¿Es posible el procesamiento de señal en tiempo real en Windows?

8

Esta pregunta está relacionada con ¿Cómo decidir qué plataforma es la mejor para implementar el procesamiento de audio en tiempo real? , pero centrándose en Windows.

Me gustaría poder recibir información de una placa de adquisición de datos y procesarla (ya sea a través de Matlab o un programa personalizado), y usar el resultado de ese programa para controlar un dispositivo externo que está conectado a través de USB. Sé que obtener respuestas duras en tiempo real con Windows es casi imposible (ya que hay un "meneo" (término técnico) de 3-15 ms).

¿Cuál es la forma más efectiva de disminuir este tiempo de meneo? es posible? ¿Debería buscar una solución integrada de inmediato?

jonsca
fuente

Respuestas:

4

Windows no es un sistema operativo en tiempo real, por lo que no tiene verdaderas capacidades de procesamiento en tiempo real en Windows.

Con Windows Vista, Microsoft ofreció una nueva API que, entre otras cosas, tenía como objetivo un rendimiento estricto, donde las transmisiones en modo exclusivo prometían un rendimiento cercano al tiempo real. Esto se logra con algunas cosas poderosas que trabajan juntas, incluida la ruta corta y exclusiva al hardware de audio desde los componentes del modo de usuario, la programación multimedia específica. Permítanme citar a Wiki sobre esto:

Para los profesionales de audio, se ha introducido un nuevo controlador de puerto WaveRT que se esfuerza por lograr un rendimiento en tiempo real mediante el uso del programador de clase multimedia y admite aplicaciones de audio que reducen la latencia de las transmisiones de audio. Como resultado, las aplicaciones en modo de usuario pueden gobernar completamente las secuencias de audio sin ninguna ejecución de código en el núcleo durante el tiempo de ejecución. WaveRT permite que la aplicación en modo de usuario acceda directamente a las memorias intermedias internas del hardware de audio y a los contadores de posición de muestra (datos en la memoria que se asignan al motor DMA del hardware de audio). Permite a las aplicaciones sondear la posición actual en la ventana de memoria DMA a la que está accediendo el hardware. WaveRT también admite la noción de un evento de notificación de reloj generado por hardware, similar a la API ASIO, para que las aplicaciones no necesiten sondear la posición actual si no lo desean. Sin embargo, WaveRT solo funciona con PCI, PCI Express o dispositivos de audio integrados; no funciona con interfaces USB o FireWire que están más extendidas en la industria del audio profesional.

Este nuevo modo de operación abrió oportunidades emocionantes para el procesamiento de audio de baja latencia, como informaron los usuarios felices :

Obtengo un audio estable sólido como una roca con búferes de 2 ms + latencia de 0,5 ms, en comparación con el audio semiestable en búferes de 4 ms (latencia de salida de + 5 ms), con ASIO.

Dependiendo de si esta aproximación en tiempo real es buena para usted, Windows podría ser un buen entorno para la tarea mencionada.

Roman R.
fuente
9

si necesita mantener la inquietud (suponiendo que eso es lo que quiere decir con "meneo" :) hasta <1 ms, diría que olvide Windows. ¿Importa la latencia absoluta de entrada a salida, o es solo la fluctuación?

Puede administrarlo algunas veces, pero garantizar que sea poco probable. ¿Cuál es la pena por no cumplir con la fecha límite? ¿Volará altavoces? ¿Conducir un brazo robot demasiado fuerte contra un tope final? ¿O algo más benigno?

El hecho de que su salida sea USB tampoco es probable que ayude en las apuestas de jitter ya que hay mucha interacción adicional del sistema operativo allí, y la topología del bus también obstaculizará su latencia potencial, si su salida está al final de una cadena de algunos centros, por ejemplo.

Martin Thompson
fuente
Sí, jitter era el término que buscaba, gracias.
jonsca
5

Si esto es posible o no depende de sus requisitos de latencia, es decir, el retraso total entre la entrada y la salida. Un buen punto de partida podría ser configurar una estación de trabajo de audio digital utilizando software de grabación como ProTools, Sonar, Ableton, Cubase, etc. Estos funcionan con hardware de E / S económico (más o menos) y vienen con controladores optimizados de baja latencia. Algunos de estos tienen interfaces "enchufables" que le permiten realizar su propio procesamiento de señal. Un formato popular es VST de Steinberg, que es compatible con muchos hosts. Solía ​​ser abierto y gratuito, pero ahora puede requerir una licencia.

Este http://www.kvraudio.com/wiki/ es un buen recurso para ese tipo de cosas.

Si desea procesar en Matlab puede que tenga que escribir sus propios controladores. Lo he visto hecho con DLL y también con interfaces JAVA nativas. También puede hackear algo junto con audioplayer () y audiorecorder () pero esto puede requerir una latencia bastante alta para lidiar con las interrupciones de Windows y hacer otras cosas. En esencia, configura un control GUI con una devolución de llamada que se activa a la vez. En la devolución de llamada, lee todas las entradas disponibles, las procesa, las introduce en la salida y espera lo mejor.

En general, ayuda a mantener el cuadro de Windows lo más "limpio" posible, es decir, sin conexión de red (mientras procesa audio), sin software antivirus y ejecutando solo el mínimo absoluto de elementos de inicio, software y servicios.

Hilmar
fuente