Hallo, ich habe ein kleines Programm in C geschrieben, das auf meiner Soundkarte (Terratec Aureon 5.1 USB) eine Wave-Datei abspielt und gleichzeitig vom Mikrofon-Eingang eine andere aufnimmt. (= Full Duplex) Ich verwende die MM-Funktionen (waveInStart(), waveInAddBuffer(), waveOutWrite(), ...) mit Double Buffering. Ich wollte einen zweistimmigen Gesang erzeugen. Dabei stelle ich fest, dass beim gleichzeitigen Abspielen der beiden Waves ein deutlich hoerbarer Zeitverzug auftritt. Ich schaete 200-400ms. Was vorher (beim Aufzeichnen der 2. Spur) synchron geklungen hat, klingt beim gleichzeitigen Abspielen ganz anders. Dabei spielt es keine Rolle, wie gross ich die Buffer waehle, selbst bei ganz grossen Buffer (1000ms) habe ich obigen Zeitverzug. Dabei frage ich mich, wieso der Zeitverzug so gross ist. Ich koennte ihn ja ausgleichen, indem ich beim Mischen der beiden Tracks diese entsprechend verschiebe. Aber dann muesste ich wissen, wie gross der Zeitverzug genau ist, ob er immer gleich bleibt. Auch wuerde mich interessieren, ob man beim Einsatz von DirektX bessere Ergebnisse erzielt. (Ich muesste mich da neu arbeiten.) Vielleicht kennt sich jemand aus?
Das liegt an Windows selbst, die I/O-Buffer werden durch viele Schichten des Betriebssystem geschickt bevor sie dann bei der Hardware landen. Die Latenz ergibt sich aus der Buffergröße einer Betriebssystemschicht, die ist fest und mit wavein/out kopiert man quasi kleine Teile diese Buffers, eine Änderung der Größe dieser Teile hat also keinerlei Auswirkungen auf die Latenz. Man kann das über 2 Wege umgehen, der eine Weg ist recht umständlich und nennt sich Kernel-Streaming. Ich habe mich damit noch nicht so befasst, weil es eine sehr Hardwarenahe Programmierung ist, man spricht quasi mit dem Soundkartentreiber direkt. Der zweite Weg ist recht simpel, und quasi ein Standard um Latenzprobleme zu umgehen, und nennt sich ASIO. Das ist eine Multimediaschnittstelle von Steinberg und vergleichsweise einfach zu benutzen, da es ein COM-Interface ist. Vorraussetzung ist allerdings, dass die Grafikkarte zu den WDM-Treibern auch noch ASIO-Treiber hat, sonst kann man die Vorteile nicht nutzen.
Wenn ich die Terratec-Faq anschaue, lese ich >Frage 5: >Woher bekomme ich einen ASIO Treiber für die Aureon USB? > >Antwort 5: >Die Firma Propagamma wird in absehbarer Zeit einen ASIO Treiber für die >Aureon 5.1 USB anbieten. Weitere Infos erhalten Sie auf folgender Seite: >http://www.usb-audio.de Bei http://www.usb-audio.de kann man einen generic Treiber herunterladen fuer 50EUR (die Demo-Version biept alle 30 Sekunden). Dieser unterstuetzt auch die Aureon USB. D.h. heisst vermutlich, dass ich die 50EUR ausgeben muesste (mehr als die Soundkarte selbst).
Wenn es ein direkter Treiber für die Hardware ist, bringt es Vorteile. Wenn es allerdings nur eine Emulation wie ASIO4ALL ist, ändert sich an der Latenz nicht viel.
Maik M. schrieb: > Vorraussetzung ist allerdings, > dass die Grafikkarte zu den WDM-Treibern auch noch ASIO-Treiber hat, > sonst kann man die Vorteile nicht nutzen.
Ich habe mir jetzt die M-Audio Fast Track MKII bestellt. Laut http://forums.m-audio.com/showthread.php?15195-Fast-Track-MKII-ASIO-drivers-and-latency hat diese Asio-Treiber und der Moderator hatte auf SEINEM PC eine Latenz von 17ms. Bevor ich 50EUR fuer diesen generic Asio-Treiber ausgebe, hole ich ich gleich bessere Hardware inklusive Treiber.
Das ist sicher eine gute Idee. 17 ms sind für ein USB-Interface wohl auch ganz gut. Wenn du aber Audiosignale mit perkussiven Elementen aufnimmst, kann man das schon hören. Du mußt ja auch immer daran denken, daß du beim gleichzeitigen Aufnehmen und Abspielen das doppelte rechnen mußt. Da die Latenz bei ASIO aber konstant und definiert ist, kannst du die durch entsprechendes Verschieben wegbekommen. So machen das auch die professionellen Tools.
Ich weiß ja nicht, was Du anstrebt - im OpenSource Bereich wärst Du vielleicht ansatzweise fündig geworden: http://www.opensourcepartners.nl/~costar/gramofile/ soll auch mittlerweile unter Windows laufen.
Und inwiefern löst diese Software eines der Probleme des Threadstarters? Wenn es einfach nur um Audio-Recording ginge, dann wäre Audacity sicherlich eine Erwähnung wert - das ist ebenfalls OSS, auf diversen Plattformen verfügbar und nicht seit 9 Jahren eingeschlafen.
> Und inwiefern löst diese Software eines der Probleme des Threadstarters?
ich kenne nicht die genauen Zielvorgaben des Threadstartes.
Das Geld für den Treiber möchte er offenbar sparen und mal eben selber
einen Treiber schreiben? Gut, dann hat er Geld gespart und eine Menge
Erfahrung gesammelt (vorrausgesetzt es klappt) - die Frage ist, ob er
das wirklich will, wenn es schon ein fertiges Produkt gibt.
Audacity ist natürlich auch eine Möglichkeit, kannte ich vorher nicht.
mar IO schrieb: > Maik M. schrieb: >> Vorraussetzung ist allerdings, >> dass die Grafikkarte zu den WDM-Treibern auch noch ASIO-Treiber hat, >> sonst kann man die Vorteile nicht nutzen. hehehe, da war ich wohl irgendwie mit den Gedanken woanders... aber man hat mich verstanden :)
Gestern habe ich die M-Audio Fast-Track USB bei Thomann bestellt und mit Paypal bezahlt, heute Mittag hat sie der Postbote gebracht, schon unheimlich. Ich bin mit dem Teil zunaechst zufrieden. Da ich mit Kondensator-Mikrofonen aufnehmen will, brauchte ich sowieso ein Teil, was mir ne Phantomspannung liefert, somit erschien mir das ne sinnvolle Investition. Beim Einstecken hat sich das Ding selbst installiert. Daraufhin habe ich meine Full-Duplex-Versuche gestartet und gemerkt, dass sich an der Latenz nichts geaendert hat. Daraufhin habe ich von M-Audio den Asio-Treiber heruntergeladen und installiert. Das muss funktioniert haben, denn mein Sampler erlaubt mir als AUSGANG die Option "M-Track-Asio" und die ist sauschnell (als Ausgang). Also die Asio-Treiber sind am PC installiert und der Ausgang funktioniert sehr gut. Als ich mein Full-Duplex-Programm startete, stellte ich fest, dass mir die Funktionen waveOutGetNumDevs(), waveInGetNumDevs(), waveOutGetDevCaps(), waveInGetDevCaps() genau die ueblichen Devices/Treiber anzeigen, die schon VOR der Asio-Installation hatte. An der Latenz hat sich auch nichts geaendert, aber ich konnte in der Systemsteuerung diese auf 128ms reduzieren. Zwar besser, aber noch nicht optimal. Da stellt sich mir die Frage, ob ich Asio zusammen mit den waveOutxxx()/waveInxxx() - Funktionen benutzen kann? Weiss das jemand? Gruss, Juergen
Ing. ET schrieb: > Da stellt sich mir die Frage, ob ich Asio zusammen mit den > waveOutxxx()/waveInxxx() - Funktionen benutzen kann? Wohl nicht, die nutzen die üblichen Windows-Multimediafunktionen und kein ASIO. Von Steinberg gibt es ein ASIO SDK, das Du vermutlich nutzen solltest: http://www.steinberg.net/de/company/developer/src_user.html Erfordert allerdings eine Anmeldung/Registrierung bei Steinberg. Nachtrag http://www.portaudio.com/ könnte eine Grundlage für weitere Entwicklungen sein, das soll auch ASIO "sprechen".
Ing. ET schrieb: > Da stellt sich mir die Frage, ob ich Asio zusammen mit den > waveOutxxx()/waveInxxx() - Funktionen benutzen kann? Nein. ASIO ist ein anderes Software-Interface, das man anders ansprechen muß.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.