Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El modelo de controlador de miniporte del sintetizador está diseñado para permitir la sincronización de la salida de audio entre varios dispositivos. Por lo tanto, contiene un modelo de tiempo más complejo que el proporcionado por un dispositivo UART puro.
Los eventos se entregan al controlador de miniport (y se capturan desde él) con una marca de tiempo asociada. Esta marca de tiempo es relativa a un reloj maestro. El reloj maestro es el mismo reloj utilizado por todas las secuencias en todo el sistema. El tiempo del reloj maestro se mide en unidades de ticks de 100 nanosegundos.
El controlador de miniporte obtiene la hora actual del reloj maestro llamando a IMasterClock::GetTime. En el momento de la creación de la conexión, el controlador de puerto pasa la interfaz IMasterClock en modo núcleo al controlador de miniporte como un parámetro de entrada al método IMiniportDMus::NewStream. Actualmente, el reloj maestro envuelve el reloj en tiempo real del sistema. El reloj maestro nunca cambia cuando hay pines que requieren que esté en el estado de ejecución. Es un reloj de tasa constante que nunca se detiene.
Todos los dispositivos de representación tienen cierta latencia entre el momento en que aceptan un evento y la hora en que se puede escuchar el evento. Esta latencia puede ser constante o variable (como en el caso de un sintetizador de software, donde la latencia depende de la posición de reproducción actual del búfer de audio). Esta latencia se compensa por:
Permitir que el controlador de miniporte DMus reciba eventos lo suficientemente de antemano para que se puedan reproducir a tiempo, a pesar de la latencia del dispositivo. Los eventos se secuencian para el controlador de miniport mediante un motor de secuenciador en el controlador de puerto DMus.
En el momento de la creación del pin, el controlador de puerto consulta al controlador miniport para un tiempo delta en unidades de 100 nanosegundos. Este tiempo delta es cuánto antes del tiempo de presentación de cada evento el controlador de miniporte desea recibir el evento. El controlador de puerto hace el máximo esfuerzo para entregar eventos con anticipación. Especificar un valor muy grande para este delta (especificado por el parámetro SchedulePreFetch de IMiniportDMus::NewStream) hace que el controlador de puerto pase los eventos al controlador de miniporte tan pronto como se entreguen al controlador de puerto desde el modo de usuario.
Informar a las aplicaciones de qué tan lejos se programan los eventos. El uso de la latencia máxima no es deseable en este caso. Dado que los eventos no se pueden cancelar una vez que se envían, cuanto más cerca se puedan enviar los eventos a su tiempo de presentación, la aplicación y la síntesis pueden interactuar con mayor capacidad de respuesta. Para controlar este requisito, DirectMusic ha introducido el concepto de un reloj de latencia.
El reloj de latencia proporciona la hora más cercana en el futuro en la que un evento puede programarse para ejecutarse y reproducirse a tiempo. Es decir, si la aplicación programa un evento que se va a reproducir antes de la hora actual según el reloj de latencia, el evento se reproduce tarde. Los controladores de miniport del sintetizador proporcionan un reloj de latencia al responder al elemento de propiedad KSPROPERTY_SYNTH_LATENCYCLOCK.
El controlador de miniport es consultado para KSPROPSETID_Synth y KSPROPERTY_SYNTH_LATENCYCLOCK. El gestor de propiedades del controlador de miniporte debe devolver un reloj de latencia que especifique, en términos del reloj maestro, la próxima vez que los datos se puedan procesar a tiempo. Por ejemplo, si el reloj maestro lee actualmente 50 y actualmente hay 25 unidades de latencia, el reloj de latencia lee 75. La razón por la que el reloj se implementa de esta manera es que la latencia no necesita ser constante y el valor devuelto es de más uso para las aplicaciones que solo el delta.