7. Feb 2021
Содержание
Введение
В этом документе описываются параметры реестра пользователя, которые применяются к ASIO4ALL версии 2 и производным от нее отдельным версиям. Он не охватывает записи реестра, требуемые 3rd стандарты сторон, такие как регистрация в качестве драйвера ASIO и интерфейса COM. Все записи реестра, рассматриваемые здесь, хранятся в кусте реестра HKEY_CURRENT_USER и, следовательно, являются индивидуальными для каждой учетной записи пользователя.
Обзор структуры
Подразделы реестра организованы в следующей иерархии: Приложения >> Аудиоустройства >> Интерфейсы устройства >> Пальцы.
На рисунке показано расположение реестра и базовая структура пользовательских настроек. Цветом отмечены восьмизначные шестнадцатеричные числа, представляющие собой хэш-значения, созданные из строк с использованием следующего алгоритма хэширования:
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);
}

Выполняется проверка на наличие коллизий хэшей, и в случае коллизии результирующий хэш увеличивается на единицу до тех пор, пока не будет обнаружено ни одной новой коллизии. Этот метод был выбран, поскольку структура в основном статична, а потеря ветви (т.е. наихудший случай) все равно не нарушит целостность приложения.
Хэши создаются из следующих источников строк:
- Команда путь к приложению и имя исполняемого файла возвращено GetModuleFileNameA (синий)
- Команда аудио-устройство PnP ID, поддерживаемый API установки Windows (красный)
- Команда интерфейс устройства Имя пути в соответствии с элементом SP_DEVICE_INTERFACE_DETAIL_DATA DevicePath, возвращаемым API установки Windows (зеленый)
Подключи с шестнадцатеричными номерами, которые не имеют цветовой маркировки, напрямую соответствуют индексам ввода-вывода. штифты с помощью которых могут быть созданы экземпляры каждого из них.
Ветка «Defaults» содержит полный набор настроек уровня приложения, которые используются вместо настроек для каждого приложения, когда ранее не было сохранено никаких настроек из соответствующего приложения. Изменения, внесенные с помощью панели управления рабочего стола («Off-line settings»), сохраняются непосредственно в ветке «Defaults».
Ключи реестра
Флаги
Тип: DWORD
Относится к: Заполнитель / Устройство / Интерфейс / шпилька
Это битовое поле, которое соответствует внутреннему состоянию и параметрам конфигурации для каждого элемента. Однако не вся информация загружается из реестра или записывается обратно в него. Ряд битов служат для внутреннего обслуживания между сеансами и также не должны изменяться. Применяются следующие определения:
#определить A4A_FLAG_STATEMASK 0x00000060
Уборка графического интерфейса, не меняйте!
#define A4A_FLAG_WATCHDOG_ENABLE 0x00000001 (приложение)
#define A4A_FLAG_SAFEMODE_ENABLE 0x00000002 (приложение)
Используется для включения функции устранения неполадок на уровне приложений. «Безопасный режим» запустится с отключенным звуком после сбоя. Сторожевой таймер попытается предотвратить потребление аудиопотоком 100% процессорного времени в течение длительных периодов, периодически приостанавливая и перезапуская звук, тем самым сохраняя некоторую отзывчивость системы. Обе функции не были полностью протестированы и обычно не должны быть включены.
#define A4A_FLAG_NOINPUT 0x00002000 (приложение)
Если ваша сборка OEM имеет выделенную глобальную функцию «Отключить ввод» (например, флажок с таким именем в панели управления ASIO), она управляется этим битом. В противном случае эта настройка зарезервирована.
#define A4A_FLAG_NOSHUTDOWN 0x00004000 (приложение)
Используется совместно с функцией «Безопасный режим» выше в качестве маркера, указывающего на неожиданное завершение работы («сбой») приложения при последнем запуске.
#define A4A_FLAG_ADVANCED 0x00008000 (приложение)
Если графический интерфейс пользователя в вашей сборке предлагает отдельные «Расширенные» и «Простые» представления настроек, этот бит указывает, какой из них активен.
#define A4A_FLAG_HWBUFFER 0x00010000 (устройство / интерфейс)
Если установлено, включает режим аппаратного буфера. Этот режим не всегда работает, а это означает, что результаты могут быть довольно непредсказуемыми. Используйте с осторожностью!
#define A4A_FLAG_FORCESRC 0x00020000 (устройство)
Если установлено, драйвер будет увеличивать/уменьшать частоту дискретизации всякий раз, когда приложение запрашивает частоту дискретизации 44.1 кГц, а 48 кГц — поддерживаемая частота дискретизации драйвера WDM. Это также будет применяться, если драйвер WDM изначально поддерживает частоту 44.1 кГц.
Если этот бит не установлен, передискретизация будет выполняться только в случае необходимости для поддержки частоты дискретизации 44.1 кГц.
#define A4A_FLAG_FORCE16 0x00040000 (устройство)
При установке битовая глубина на интерфейсе WDM/KS будет ограничена 16, даже если устройство заявляет о поддержке большей битовой глубины. В противном случае устройство будет работать с максимально возможной битовой глубиной. Эта настройка не влияет на формат выборки ASIO, который всегда будет Int32Lsb.
#define A4A_FLAG_RTAUDIO 0x00080000 (устройство/интерфейс)
#define A4A_FLAG_MEMBARRIER 0x00100000 (интерфейс)
Интерфейс свойств устройства типа WaveRT внутри. Обычно эта информация не записывается обратно в реестр, а если записывается, то ее нельзя изменять!
#define A4A_FLAG_PULLMODE 0x00200000 (устройство)
(v2.9 +) Если установлено, ASIO4ALL попытается использовать режим pull на контактах WaveRT этого устройства. Если не установлено, всегда будет использоваться (более безопасный) режим опроса («push»). (V2.8) Этот бит не имеет никакого эффекта, режим pull будет использоваться везде, где это возможно.
#define A4A_FLAG_OFFSET_VALID 0x01000000 (контакт)
#define A4A_FLAG_RELAX_NUMPLAYING 0x02000000 (устройство)
Внутреннее ведение хозяйства. Обычно эта информация не записывается обратно в реестр, а если записывается, то ее нельзя менять!
#define A4A_FLAG_RUNNING 0x10000000 (устройство / интерфейс / контакт)
#define A4A_FLAG_ERROR 0x20000000 (устройство / интерфейс / контакт)
#define A4A_FLAG_AVAILABLE 0x40000000 (устройство / интерфейс / контакт)
Используется внутри для отслеживания динамических состояний объектов. Обычно эта информация не записывается обратно в реестр, а если и записывается, то она бесполезна и не должна изменяться!
#define A4A_FLAG_ENABLED 0x80000000 (устройство / интерфейс / контакт)
При установке соответствующий объект включается в текущей конфигурации. Однако для того, чтобы пин действительно стал активным, его родительский интерфейс также должен быть установлен на «включен». Аналогично, чтобы интерфейс стал активным, родительское устройство также должно быть установлено на «включен».
Частота дискретизации
Тип: DWORD
Относится к: Заполнитель
За штуку: 1 / s
Это частота дискретизации, которую драйвер вернет вызову ASIOgetSampleRate() хост-приложения в качестве частоты дискретизации по умолчанию.
Размер буфера
Тип: DWORD
Относится к: Устройство
За штуку: образцы
Размер буфера для устройства, возвращаемый ASIOgetBufferSize () как предпочтительный размер буфера драйвера. Если активно более одного устройства, то устройство с наибольшим связанным размером буфера будет иметь соответствующее возвращаемое значение.
ЯдроБуферы
Тип: DWORD
Относится к: Устройство
За штуку: н /
Количество буферов в очереди буферов WDM/KS. Может быть: 2, 3 или 4.
LtcyIn
Тип: DWORD
Относится к: Устройство
За штуку: образцы
Дополнительная задержка ввода для возврата с помощью ASIogetLatencies(). Этот параметр не оказывает дальнейшего влияния на выполнение кода драйвера и служит исключительно для поддержки автоматической компенсации задержки, если она выполняется хост-приложением.
LtcyOut
Тип: DWORD
Относится к: Устройство
За штуку: образцы
Дополнительная задержка вывода для возврата ASIOgetLatencies(). Этот параметр не оказывает дальнейшего влияния на выполнение кода драйвера и служит исключительно для поддержки автоматической компенсации задержки, если она выполняется хост-приложением.
WndPos
Тип: DWORD
Относится к: Заполнитель
За штуку: Координаты X/Y
Предыдущее расположение окна панели управления ASIO4ALL на экране.
Рекомендации
- ASIO-SDK, Steinberg Media Technologies GmbH
- Набор драйверов для Windows, Microsoft, Корпорация
- Win32 Software Development Kit, Microsoft, Корпорация
- Руководство по эксплуатации ASIO4ALL, Михаэль Типпах
Авторские права © 2003-2021, Михаэль Типпах
Никаких гарантий относительно точности информации, представленной в этом документе, не дается. Если не согласовано иное, спецификации продукта могут быть изменены в любое время и без предварительного уведомления.
Все используемые здесь товарные знаки являются полностью признанной собственностью их соответствующих владельцев и используются исключительно в целях идентификации продукта.