Lieber Fujak,
Das genau du nicht viel von ASIO hälst, sollte jedem der dein digitales Patchwork aus BigBen, USB, S/PDIF und KernelStreaming in Augenschein genommen hat, klar sein. Das du deine Haltung oder Überzeugung verteidigst ist auch ganz legitim.
Es soll mich aber nicht daran hindern (falls du mich nicht Sperrst, Löscht oder andersweitig zum Schweigen bringst) meine Ansichten zu der technischen Überlegenheit von ASIO im Vergleich zu Windows API´s zu propagieren.
Vorweg hat dein Beispiel Terratec ASIO nichts mit der Problematik "asynchron" zu tun.
Auch wenn ein Interface nicht in verschiedene Clock-Modi eingestellt werden kann, oder es von einem asynchronen Modus bei Terratec die Rede ist, so ist ein ASIO-Gerät (Clock-bezogen) immer asynchron bzw. unabhängig von der Clock des Computers.
Weiter kann ich nicht erkennen dass Gordon Rankin´s Ayre DAC irgendetwas mit einen FPGA zu tun haben soll.
Die technische Erklärung zum async USB Verfahren von Ayre ist hier zu lesen :
http://www.ayre.com/pdf/Ayre_USB_DAC_White_Paper.pdf
-aber bitte : ich bin gespannt wo du von einem FPGA in diesem Zusammenhang erfahren hast.
Aber nochmals zu ASIO und wie es funktioniert.
Dazu erst einige Vorraussetzungen zu Treiber und Windows die aus Wikipedia zitiert sind.
"Die Hauptaufgabe von Gerätetreibern ist das Bereitstellen von hardwarenahen Funktionen durch die Hardwareabstraktionsschicht. Alle Arten von Geräten sind unterschiedlich, selbst Geräte, die denselben Zweck erfüllen. Sogar die verschiedenen Modelle eines Gerätes desselben Herstellers, die zum Beispiel neue Funktionen oder mehr Leistung versprechen, werden oft völlig anders angesteuert.
Von Computern und ihren Betriebssystemen kann nicht erwartet werden, dass sie mit all diesen verschiedenen Arten umgehen können, erst recht nicht mit zukünftigen Geräten. Um dieses Problem zu lösen, gibt das Betriebssystem vor, wie eine Klasse von Geräten angesprochen werden sollte. Die Gerätetreiber kümmern sich dann um die Übersetzung dieser Funktionsaufrufe des Betriebssystems in gerätespezifische Steuersignale. Theoretisch sollte also auch ein völlig neues Gerät mit völlig neuer Ansteuerung problemlos funktionieren, sobald ein Treiber für dieses Gerät vorliegt.
Oft existieren viele verschiedene Varianten eines Treibers, in erster Linie abhängig von der unterstützten Hardware, oft auch in verschiedenen (Entwicklungs-)Versionen. Zudem muss für jedes unterstützte Betriebssystem eine Variante existieren, da die Schnittstellen hierzu zum Beispiel bei Microsoft Windows oder Linux stark unterschiedlich sind. Weiterhin besteht eine Abhängigkeit von der grundlegenden Architektur des Rechners und des Betriebssystems, auch von der Verarbeitungsbandbreite.
Einen Gerätetreiber zu programmieren gilt in den meisten Fällen als Herausforderung, da es ein eingehendes Verständnis der Funktionsweise einer Plattform erfordert, sowohl auf der Hardware- wie der Softwareseite.
Normalerweise werden Gerätetreiber daher von den Hardwareherstellern selbst geschrieben, da nur sie das genaue Design der Hardware kennen.
Sogenannte Klassentreiber (auch generische Treiber genannt) sind weitestgehend herstellerunabhängig. Oft genannte Beispiele hierfür sind Klassentreiber für Drucker oder für die Geräteklassen, die am Universal-Serial-Bus angeschlossen werden können."
Generische Treiber für Audio, Video und GameController werden Windows API´s genannt (
http://de.wikipedia.org/wiki/Windows_API) zu denen folgende gehören:
Direct Sound
MME :
KernelStreaming (KS)
WASAPI
Die Playersoftware bindet sich zu sollch einem Treiber um die Kommunikation zur Audio-Hardware zu etablieren. Dabei verwendet diese Kombination (Player und Treiber) die eingebaute Clock des Computers (die bekanntlich nicht ausgesprochen jitterarm ist).
In anderen Worten : mit einem generischen Windowstreiber ist der Computer der Master und das Interface nimmt ein Audiostream vom PC an. Bei DS und MME wird das Signal durch den K-Mixer geschickt und evt. resampled. Bei WASAPI und KS wird der Mixer zwar umgangen, aber die Taktung liegt immer noch beim Windows Betriebssystem.
Dies kann man sehr einfach Überprüfen in dem man bei einem generischen Windowstreiber im Gerätemanager den "Systemzeitgeber" deaktiviert. Dann läuft nix mehr.
Bei ASIO läuft dann noch alles bestens.
ASIO :
Steinbergs ASIO Standard ist eine Normierung wie ein Gerätehersteller seine proprietäre Software an einen Windows Computer auf der HAL-Ebene (Hardwareabstraktionsschicht) programmieren kan
Die Norm sieht auch verschiedene Einhaltungsstandards wie Latenz und Buffers vor, aber ganz grundsätzlich ist die Norm um die Kommunikation mit Windows zu gewähren OHNE damit auf die Windowssoftware zurück zu greifen.
Dafür setzt das ASIO Gerät auf die Hardwareabstraktionsschicht auf und isoliert sich von allen Teilen des Betriebssystems. Dies heisst z.B. dass in einem PC mit einer ASIO Soundkarte/Interface gibt es nun 2 unabhängige Geräte die beide auf der Computerplatine sitzen (entweder über USB, FireWire oder PCI). Dies ist auch im Gerätemanager ausgewiesen.
Weil ein ASIO Gerät auf der HAL via einem Datenbus angedockt ist, kann die Kommunikation zum PC NUR in Datenpakete vorgehen. Da es keine Taktung einer Clock in so einem Modus gibt, wird der Taktgeber zwangsläuffig die Soundkarte/Interface sein.
Also eine asynchrone Taktung !!
Die asynchone USB Audio Class 2, die es über Apple´s CoreAudio und Linux schon lange gibt, ist ein ganz anderes Thema, geehrter Fujak.
Vincent´s "Welltemperedcomputer.com" beleuchtet USB Audio sehr verständlich.
Mit hochachtungsvollen Grüße
Leif