Benutzerregistrierungseinstellungen

7. Feb 2021

Inhaltsverzeichnis

Einführung

Dieses Dokument beschreibt die Benutzerregistrierungseinstellungen, die für ASIO4ALL Revision 2 und abgeleitete Einzelversionen davon gelten. Es behandelt nicht die Registrierungseinträge, die für 3 erforderlich sind.rd Drittanbieterstandards, wie die Registrierung als ASIO-Treiber und COM-Schnittstelle. Alle hier behandelten Registrierungseinträge werden unter der Registrierungsstruktur HKEY_CURRENT_USER gespeichert und sind daher für jedes Benutzerkonto individuell.

Strukturübersicht

Registrierungsunterschlüssel sind in der folgenden Hierarchie organisiert: Anwendungen >> Audiogeräte >> Geräteschnittstellen >> Stifte.

Die Abbildung zeigt den Registrierungsort und die grundlegende Struktur der Benutzereinstellungen. Die farblich markierten achtstelligen Hexadezimalzahlen sind Hashwerte, die mit dem folgenden Hashalgorithmus aus Zeichenfolgen erstellt werden:

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);
}

Es wird eine Prüfung auf Hash-Kollisionen durchgeführt und im Falle einer Kollision wird der resultierende Hash um eins erhöht, bis keine weitere Kollision mehr gefunden wird. Diese Methode wurde gewählt, da die Struktur größtenteils statisch ist und der Verlust eines Zweigs (also der schlimmste Fall) die Integrität der Anwendung immer noch nicht gefährdet.

Hashes werden aus den folgenden Zeichenfolgenquellen erstellt:

  • Die Anwendungspfad und ausführbarer Name zurückgegeben von GetModuleFileNameA (blau)
  • Die  Audiogerät PnP-ID, wie sie von der Windows Setup-API verwaltet wird (rot)
  • Die Geräteschnittstelle Pfadname gemäß dem von der Windows Setup-API zurückgegebenen DevicePath-Element SP_DEVICE_INTERFACE_DETAIL_DATA (grün)

Nicht farblich markierte Unterschlüssel in Hex-Nummern entsprechen direkt den Indizes der Ein- und Ausgabe Stifte wodurch Instanzen von jedem erstellt werden können.

Der Zweig „Standardeinstellungen“ enthält einen vollständigen Satz von Einstellungen auf Anwendungsebene, die anstelle von Einstellungen pro Anwendung verwendet werden, wenn zuvor keine Einstellungen innerhalb der jeweiligen Anwendung gespeichert wurden. Über das Desktop-Kontrollfeld („Offline-Einstellungen“) vorgenommene Änderungen werden direkt im Zweig „Standardeinstellungen“ gespeichert.

Registrierungsschlüssel

Flags

Typ: DWORD

Gilt für: Anwendung / Gerät / Interface / Pin

Dies ist ein Bitfeld, das dem internen Status und den Konfigurationseinstellungen für jedes Element entspricht. Allerdings werden nicht alle Informationen aus der Registrierung geladen bzw. in die Registrierung zurückgeschrieben. Eine Reihe von Bits dienen der internen Verwaltung zwischen Sitzungen und sollten ebenfalls nicht geändert werden. Es gelten die folgenden Definitionen:

#define A4A_FLAG_STATEMASK 0x00000060

GUI-Housekeeping, nicht ändern!

#define A4A_FLAG_WATCHDOG_ENABLE 0x00000001 (Anwendung)

#define A4A_FLAG_SAFEMODE_ENABLE 0x00000002 (Anwendung)

Wird verwendet, um die Fehlerbehebungsfunktion auf Anwendungsebene zu aktivieren. „Abgesicherter Modus“ wird nach einem Absturz mit deaktiviertem Audio gestartet. Der Watchdog versucht zu verhindern, dass der Audio-Thread über längere Zeiträume 100 % der CPU-Zeit verbraucht, indem er den Audio-Thread regelmäßig anhält und neu startet, sodass das System einigermaßen reaktionsfähig bleibt. Beide Funktionen sind nicht vollständig getestet und sollten normalerweise nicht aktiviert werden.

#define A4A_FLAG_NOINPUT 0x00002000 (Anwendung)

Wenn Ihr OEM-Build über eine dedizierte globale „Disable Input“-Funktion verfügt (z. B. ein Kontrollkästchen mit diesem Namen im ASIO-Bedienfeld), wird es von diesem Bit gesteuert. Andernfalls ist diese Einstellung reserviert.

#define A4A_FLAG_NOSHUTDOWN 0x00004000 (Anwendung)

Dies wird in Verbindung mit der oben beschriebenen Funktion „Abgesicherter Modus“ als Markierung verwendet, um ein unerwartetes Herunterfahren („Absturz“) der Anwendung beim letzten Ausführen anzuzeigen.

#define A4A_FLAG_ADVANCED 0x00008000 (Anwendung)

Wenn die GUI in Ihrem Build unterschiedliche Einstellungsansichten „Erweitert“ und „Einfach“ bietet, gibt dieses Bit an, welche davon aktiv ist.

#define A4A_FLAG_HWBUFFER 0x00010000 (Gerät / Schnittstelle)

Wenn gesetzt, wird der Hardware-Puffermodus aktiviert. Dieser Modus funktioniert nicht immer, was bedeutet, dass die Ergebnisse ziemlich unvorhersehbar sein können. Mit Vorsicht verwenden!

#define A4A_FLAG_FORCESRC 0x00020000 (Gerät)

Wenn diese Einstellung aktiviert ist, führt der Treiber eine Hoch-/Heruntersamplingrate durch, wenn die Anwendung eine Samplingrate von 44.1 kHz anfordert und 48 kHz eine vom WDM-Treiber unterstützte Samplingrate ist. Dies gilt auch, wenn der WDM-Treiber nativ 44.1 kHz unterstützt.

Wenn dieses Bit nicht gesetzt ist, wird ein Resampling nur bei Bedarf durchgeführt, um die Abtastrate von 44.1 kHz überhaupt zu unterstützen.

#define A4A_FLAG_FORCE16 0x00040000 (Gerät)

Wenn diese Einstellung aktiviert ist, wird die Bittiefe der WDM/KS-Schnittstelle auf 16 beschränkt, selbst wenn das Gerät größere Bittiefen unterstützt. Andernfalls wird das Gerät mit der höchstmöglichen Bittiefe betrieben. Diese Einstellung hat keinen Einfluss auf das ASIO-Sampleformat, das immer Int32Lsb ist.

#define A4A_FLAG_RTAUDIO 0x00080000 (Gerät/Schnittstelle)

#define A4A_FLAG_MEMBARRIER 0x00100000 (Schnittstelle)

Markiert die Geräteeigenschaftenschnittstelle des Typs WaveRT intern. Normalerweise wird diese Information nicht in die Registry zurückgeschrieben und wenn doch, darf sie nicht verändert werden!

#define A4A_FLAG_PULLMODE 0x00200000 (Gerät)

(v2.9 +) Wenn gesetzt, versucht ASIO4ALL, den Pull-Modus für die WaveRT-Pins dieses Geräts zu verwenden. Wenn nicht gesetzt, wird immer der (sicherere) Polling-Modus („Push“) verwendet. (V2.8) Dieses Bit hat keine Wirkung. Der Pull-Modus wird, wann immer möglich, verwendet.

#define A4A_FLAG_OFFSET_VALID 0x01000000 (Stift)

#define A4A_FLAG_RELAX_NUMPLAYING 0x02000000 (Gerät)

Interne Haushaltsführung. Normalerweise werden diese Informationen nicht in die Registrierung zurückgeschrieben und wenn doch, dürfen sie nicht geändert werden!

#define A4A_FLAG_RUNNING 0x10000000 (Gerät / Schnittstelle / Pin)

#define A4A_FLAG_ERROR 0x20000000 (Gerät / Schnittstelle / Pin)

#define A4A_FLAG_AVAILABLE 0x40000000 (Gerät / Schnittstelle / Pin)

Wird intern verwendet, um den Status dynamischer Objekte zu verfolgen. Normalerweise werden diese Informationen nicht in die Registrierung zurückgeschrieben, und wenn doch, sind sie von sehr geringem Nutzen und dürfen nicht geändert werden!

#define A4A_FLAG_ENABLED 0x80000000 (Gerät / Schnittstelle / Pin)

Wenn gesetzt, ist das jeweilige Objekt in der aktuellen Konfiguration aktiviert. Damit ein Pin tatsächlich aktiv wird, muss allerdings auch seine übergeordnete Schnittstelle auf „aktiviert“ gesetzt sein. Umgekehrt muss auch das übergeordnete Gerät auf „aktiviert“ gesetzt sein, damit die Schnittstelle aktiv wird.

Beispielrate

Typ: DWORD

Gilt für: Anwendung

Einheit: 1 / s

Dies ist die Abtastrate, die der Treiber an den Aufruf ASIOgetSampleRate() der Hostanwendung als Standardabtastrate zurückgibt.

Puffergröße

Typ: DWORD

Gilt für: Gerät

Einheit: Muster

Die Puffergröße für das Gerät, die von ASIOgetBufferSize() als vom Treiber bevorzugte Puffergröße zurückgegeben werden soll. Wenn mehr als ein Gerät aktiv ist, wird der jeweilige Wert an das Gerät mit der größten zugehörigen Puffergröße zurückgegeben.

Kernelpuffer

Typ: DWORD

Gilt für: Gerät

Einheit: n/a

Die Anzahl der Puffer in der WDM/KS-Pufferwarteschlange. Kann 2, 3 oder 4 sein.

Abonnieren

Typ: DWORD

Gilt für: Gerät

Einheit: Muster

Zusätzliche Eingabelatenz, die von ASIogetLatencies () zurückgegeben werden soll. Dieser Parameter hat keine weiteren Auswirkungen auf die Ausführung des Treibercodes und dient ausschließlich zur Unterstützung der automatischen Latenzkompensation, wenn diese von der Hostanwendung ausgeführt wird.

Abonnieren

Typ: DWORD

Gilt für: Gerät

Einheit: Muster

Zusätzliche Ausgabelatenz, die von ASIOgetLatencies () zurückgegeben werden soll. Dieser Parameter hat keine weiteren Auswirkungen auf die Ausführung des Treibercodes und dient ausschließlich zur Unterstützung der automatischen Latenzkompensation, wenn diese von der Hostanwendung ausgeführt wird.

WndPos

Typ: DWORD

Gilt für: Anwendung

Einheit: X/Y-Koordinaten

Die vorherige Bildschirmposition des ASIO4ALL-Systemsteuerungsfensters.

Referenzen

  1. ASIO SDK, Steinberg Media Technologies GmbH
  2. Windows-Treiberkit, Microsoft, Corp.
  3. Win32 Software Development Kit, Microsoft, Corp.
  4. ASIO4ALL Bedienungsanleitung, Michael Tippach

Copyright © 2003-2021, Michael Tippach

Für die Richtigkeit der in diesem Dokument bereitgestellten Informationen wird keine Garantie übernommen. Sofern nicht anders vereinbart, können Produktspezifikationen jederzeit und ohne Vorankündigung geändert werden.

Alle hierin verwendeten Warenzeichen sind das uneingeschränkte Eigentum ihrer jeweiligen Inhaber und werden nur zu Zwecken der Produktidentifikation verwendet.

ASIO ist ein Warenzeichen von Steinberg Media Technologies GmbH.  Alle anderen Marken sind Eigentum der jeweiligen Inhaber und werden nur zu Zwecken der Produktidentifikation verwendet.