Salida de la tarjeta de sonido de activación del hardware [cerrado]

0

Me gustaría activar la salida de una tarjeta de sonido para que el dispositivo comience a reproducirse en un momento preciso en el tiempo.

Normalmente, la tarjeta de sonido conectada a su PC comenzará a reproducirse después de que reciba un activador de software del sistema operativo. Cuando el usuario hace clic en reproducir, hay un cierto retraso antes de que la tarjeta de sonido comience su salida. Este retraso no es el mismo cada vez, y depende de lo que esté haciendo el sistema operativo cuando el usuario intenta iniciar la reproducción.

Me gustaría eliminar esta latencia irreproducible, de modo que la tarjeta de sonido se inicie en un momento conocido, proporcionada por un disparador electrónico desde un dispositivo externo. (El dispositivo externo proporcionaría una señal digital TTL, y me gustaría disparar en el flanco ascendente o descendente).

¿Alguien sabe cómo lograr esto con cualquier tarjeta de sonido disponible comercialmente?

Gracias, labjunky

    
pregunta labjunky

2 respuestas

2

Usted (probablemente) no puede hacer lo que está tratando de hacer.

Los buffers de sonido tienen una cierta cantidad de datos en ellos. Usando la tasa de reproducción, podemos medir esto a tiempo. Una duración de búfer de sonido "en tiempo real" común sería, por ejemplo, 5 ms. Cada 5 ms la CPU necesita ser interrumpida para que pueda generar los siguientes 5 ms de datos.

El problema con el que se encontrará es que el usuario presiona reproducir de forma asíncrona a este hipotético temporizador de 5 ms. Si tiene mucha suerte, el usuario presiona reproducir justo antes de que expire el temporizador, y el sonido comienza a reproducirse "inmediatamente". Si no tiene mucha suerte, el usuario presiona reproducir justo después de que expire el temporizador, y el sonido comenzará a reproducirse "5 ms después de inmediato".

Incluso si supiera exactamente cuándo se disparará el temporizador de 5 ms, no puede hacer que las personas presionen jugar de forma sincronizada con ese temporizador. Siempre tendrá una latencia variable del tamaño de 0 < = x < = sizeof (SoundBuffer)

    
respondido por el ajs410
1

A menos que esté hablando de reproducir algún tipo de muestras que ya están almacenadas en una tarjeta de sonido, todo lo que una tarjeta de sonido "reproduce" debe provenir del controlador asociado con la tarjeta de sonido, y ese controlador, a su vez, debe ser alimentado por algún software en la PC.

Como dijiste, ese proceso se inicia cuando el usuario hace clic en el ícono Reproducir. En ese punto, el audio (cuyo comienzo ya puede estar cargado en la RAM como resultado de la "apertura" del archivo multimedia) se envía al controlador asociado con la tarjeta de sonido.

Una vez que se inicia el proceso, se puede usar DMA para enviar el audio al controlador a una velocidad suficiente para reproducir el sonido a un CD o mayor, lo cual es una tarea no trivial: sonido con calidad de CD, a 44.1 kHz, requiere que se envíe una muestra estéreo cada 22.7 µs, lo que si se realiza estrictamente en el software que utiliza una interrupción de temporizador a esa velocidad, supondría una carga para el procesador.

Suponiendo que la computadora usa DMA, entonces Windows solo tiene que seguir leyendo los bloques en la RAM lo suficientemente rápido para que el controlador nunca se quede sin audio para reproducir.

Sin embargo, hay una latencia después de presionar el botón Reproducir antes de que se envíen las primeras muestras.

El hardware de la tarjeta de sonido no tiene manera de hacer que esto suceda más rápido, ya que no tiene acceso al sistema de archivos del sistema. Entonces, incluso si un disparador de hardware estuviera disponible como un pin GPIO (E / S de propósito general) en la tarjeta de sonido, no podría realizar ninguna acción localmente en la tarjeta de sonido que iniciaría inmediatamente el audio que se reproducirá, pero en su lugar, tendría que manejarse como una entrada para el controlador de la tarjeta de sonido que ya se mencionó, lo que simularía que se presionara de alguna manera el botón Reproducir, y esto incurriría en la misma latencia descrita anteriormente.

Por otro lado, si está hablando de un audio que se puede precargar completamente en la propia tarjeta de sonido (si tiene esa función), que tendrá una duración limitada, entonces es posible que tenga la tarjeta de sonido inicia la reproducción de dichas muestras en la recepción de un disparador de hardware. Pero creo que estos se limitarían a varios cientos de milisegundos, o unos pocos segundos como máximo. No se aplicaría a la reproducción de un archivo multimedia.

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas