Configuración del registro de usuario

7. Feb 2021

Índice del Contenido

Introducción

Este documento describe las configuraciones de registro de usuario que se aplican a la revisión 4 de ASIO2ALL y a las versiones individuales derivadas de la misma. No cubre las entradas de registro requeridas por la revisión 3 de ASIOXNUMXALL.rd estándares de terceros, como el registro como controlador ASIO e interfaz COM. Todas las entradas de registro que se tratan aquí se almacenan en la sección de registro HKEY_CURRENT_USER y, por lo tanto, son individuales para cada cuenta de usuario.

Descripción general de la estructura

Las subclaves del registro están organizadas en la siguiente jerarquía: Aplicaciones >> Dispositivos de audio >> Interfaces de dispositivos >> Pins.

La ilustración muestra la ubicación del registro y la estructura básica de la configuración del usuario. Los números hexadecimales de ocho dígitos marcados con colores son valores hash creados a partir de cadenas utilizando el siguiente algoritmo hash:

DWORD CreateHash (char inStr[])
{
  DWORD hash = 0;
  unsigned char x, y, z = 0;
  long idx = 0;
  while (x = (unsigned char) inStr[idx++])
  {
    y = (unsigned char) (hash & 0xFF);
    z = y - x;
    y^= x;
    hash = (hash & 0xFFFFFF00) + (DWORD) y;
    hash = (hash >> (z & 31)) | (hash << ((32 - z) & 31));
  }
  return (hash);
}

Se realiza una comprobación de colisiones de hash y, en caso de que se produzca una colisión, el hash resultante se incrementa en uno hasta que no se encuentren más colisiones. Se ha elegido este método porque la estructura es en su mayor parte estática y la pérdida de una rama (es decir, el peor de los casos) no comprometerá la integridad de la aplicación.

Los hashes se crean a partir de las siguientes fuentes de cadenas:

  • La Ruta de la aplicación y nombre del ejecutable devuelto por GetModuleFileNameA (azul)
  • La  dispositivo de audio ID de PnP tal como lo mantiene la API de configuración de Windows (rojo)
  • La Interfaz del dispositivo Nombre de ruta según el miembro DevicePath SP_DEVICE_INTERFACE_DETAIL_DATA devuelto por la API de configuración de Windows (verde)

Las subclaves numeradas hexadecimales que no están marcadas con color corresponden directamente a los índices de entrada y salida. patas mediante el cual se pueden crear instancias de cada uno.

La rama “Valores predeterminados” contiene un conjunto completo de configuraciones a nivel de aplicación que se utilizan en lugar de las configuraciones por aplicación cuando no se han almacenado configuraciones previamente desde la aplicación respectiva. Los cambios realizados mediante el panel de control del escritorio (“Configuración sin conexión”) se almacenan directamente en la rama “Valores predeterminados”.

Claves de registro

Banderas

Tipo: DWORD

Se aplica a: Solicitud / Inteligencia del / Fácil de usar / Pin

Este es un campo de bits que corresponde al estado interno y a los ajustes de configuración de cada elemento. Sin embargo, no toda la información se carga desde el registro ni se vuelve a escribir en él. Una serie de bits sirven para el mantenimiento interno entre sesiones y tampoco se deben modificar. Se aplican las siguientes definiciones:

#define A4A_FLAG_STATEMASK 0x00000060

Mantenimiento de la GUI, ¡no cambies!

#define A4A_FLAG_WATCHDOG_ENABLE 0x00000001 (aplicación)

#define A4A_FLAG_SAFEMODE_ENABLE 0x00000002 (aplicación)

Se utiliza para habilitar la función de resolución de problemas a nivel de aplicación. El “modo seguro” se iniciará con el audio deshabilitado después de un bloqueo. El sistema de vigilancia intentará evitar que el hilo de audio consuma el 100 % del tiempo de CPU durante períodos prolongados pausando y reiniciando el audio periódicamente, lo que mantendrá el sistema relativamente receptivo. Ambas funciones no están completamente probadas y normalmente no deberían estar habilitadas.

#define A4A_FLAG_NOINPUT 0x00002000 (aplicación)

Si su compilación OEM tiene una funcionalidad global dedicada a “Deshabilitar entrada” (por ejemplo, una casilla de verificación con ese nombre en el panel de control ASIO), se controla mediante este bit. De lo contrario, esta configuración está reservada.

#define A4A_FLAG_NOSHUTDOWN 0x00004000 (aplicación)

Esto se utiliza junto con la función “Modo seguro” mencionada anteriormente como marcador para indicar un apagado inesperado (“bloqueo”) de la aplicación durante la última ejecución.

#define A4A_FLAG_ADVANCED 0x00008000 (aplicación)

Si la GUI de su compilación ofrece vistas de configuración distintas: “Avanzada” y “Simple”, este bit indica cuál de ellas está activa.

#define A4A_FLAG_HWBUFFER 0x00010000 (dispositivo / interfaz)

Cuando se configura, habilita el modo de búfer de hardware. Este modo no siempre funciona, lo que significa que los resultados pueden ser bastante impredecibles. ¡Úselo con precaución!

#define A4A_FLAG_FORCESRC 0x00020000 (dispositivo)

Cuando se configura, el controlador aumentará o disminuirá la frecuencia de muestreo cada vez que la aplicación solicite una frecuencia de muestreo de 44.1 kHz, y 48 kHz es una frecuencia de muestreo compatible con el controlador WDM. Esto también se aplicará si el controlador WDM admite 44.1 kHz de forma nativa.

Si este bit no está configurado, el remuestreo solo se realizará si es necesario para admitir la frecuencia de muestreo de 44.1 kHz.

#define A4A_FLAG_FORCE16 0x00040000 (dispositivo)

Cuando se configura, la profundidad de bits en la interfaz WDM/KS se limitará a 16, incluso si el dispositivo afirma admitir profundidades de bits mayores. De lo contrario, el dispositivo se ejecutará con la profundidad de bits más alta posible. Esta configuración no tiene influencia en el formato de muestra ASIO, que siempre será Int32Lsb.

#define A4A_FLAG_RTAUDIO 0x00080000 (dispositivo/interfaz)

#define A4A_FLAG_MEMBARRIER 0x00100000 (interfaz)

Marca la interfaz de propiedades de dispositivo de tipo WaveRT de forma interna. Normalmente, esta información no se vuelve a escribir en el registro y, si lo hace, no debe modificarse.

#define A4A_FLAG_PULLMODE 0x00200000 (dispositivo)

(v2.9 +) Si se configura, ASIO4ALL intentará usar el modo pull en los pines WaveRT de este dispositivo. Si no se configura, siempre se usará el modo de sondeo (más seguro) (“push”). (V2.8) Este bit no tiene efecto, se utilizará el modo pull siempre que sea posible.

#define A4A_FLAG_OFFSET_VALID 0x01000000 (pin)

#define A4A_FLAG_RELAX_NUMPLAYING 0x02000000 (dispositivo)

Mantenimiento interno. Normalmente, esta información no se vuelve a incluir en el registro y, si se incluye, no se debe modificar.

#define A4A_FLAG_RUNNING 0x10000000 (dispositivo / interfaz / pin)

#define A4A_FLAG_ERROR 0x20000000 (dispositivo / interfaz / pin)

#define A4A_FLAG_AVAILABLE 0x40000000 (dispositivo / interfaz / pin)

Se utiliza internamente para realizar un seguimiento de los estados de los objetos dinámicos. Normalmente, esta información no se vuelve a escribir en el registro y, si se escribe, es de muy poca utilidad y no se debe modificar.

#define A4A_FLAG_ENABLED 0x80000000 (dispositivo / interfaz / pin)

Cuando se configura, el objeto respectivo se habilita en la configuración actual. Sin embargo, para que un pin se active, su interfaz principal también debe estar configurada como "habilitada". Del mismo modo, para que la interfaz se active, el dispositivo principal también debe estar configurado como "habilitado".

SampleRate

Tipo: DWORD

Se aplica a: Solicitud

Unidad: 1 / s

Esta es la frecuencia de muestreo que el controlador devolverá a la llamada ASIOgetSampleRate() de la aplicación host como frecuencia de muestreo predeterminada.

Bufferize

Tipo: DWORD

Se aplica a: Inteligencia del

Unidad: Muestras

El tamaño del búfer del dispositivo que ASIOgetBufferSize() devolverá como el tamaño de búfer preferido del controlador. Si hay más de un dispositivo activo, se devolverá el valor correspondiente del dispositivo con el tamaño de búfer asociado más grande.

Búferes de núcleo

Tipo: DWORD

Se aplica a: Inteligencia del

Unidad: n/a

La cantidad de buffers en la cola de buffers de WDM/KS. Puede ser 2, 3 o 4.

LtcyIn

Tipo: DWORD

Se aplica a: Inteligencia del

Unidad: Muestras

Latencia de entrada adicional que devolverá ASIogetLatencies(). Este parámetro no tiene ningún impacto adicional en la ejecución del código del controlador y sirve únicamente para respaldar la compensación automática de latencia si la realiza la aplicación host.

LtcyFuera

Tipo: DWORD

Se aplica a: Inteligencia del

Unidad: Muestras

Latencia de salida adicional que se devolverá mediante ASIOgetLatencies(). Este parámetro no tiene ningún impacto adicional en la ejecución del código del controlador y sirve únicamente para respaldar la compensación automática de latencia si la realiza la aplicación host.

Posición del viento

Tipo: DWORD

Se aplica a: Solicitud

Unidad: Coordenadas X/Y

La ubicación anterior en pantalla de la ventana del panel de control ASIO4ALL.

Referencias

  1. Kit de desarrollo de software ASIO, Steinberg Media Technologies GmbH
  2. Kit de controladores de Windows, Microsoft, Corporación.
  3. Kit de desarrollo de software Win32, Microsoft, Corporación.
  4. Manual de instrucciones ASIO4ALL, Michael Tippach

Derechos de autor © 2003-2021, Michael Tippach

No se ofrece garantía alguna respecto de la exactitud de la información proporcionada en este documento. A menos que se acuerde lo contrario, las especificaciones del producto están sujetas a cambios en cualquier momento y sin previo aviso.

Todas las marcas comerciales utilizadas en este documento son propiedad totalmente reconocida de sus respectivos dueños y se utilizan únicamente con fines de identificación del producto.