www.mikrocontroller.net

Forum: PC-Programmierung Gleichzeitiges Abspielen und Aufzeichnen von Waves (WIndows), Latenzen


Autor: Ing. ET (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Maik M. (myco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ing. ET (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Maik M. (myco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: mar IO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ing. ET (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir jetzt die M-Audio Fast Track MKII bestellt.

Laut
http://forums.m-audio.com/showthread.php?15195-Fas...
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.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: smoerre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: smoerre (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Maik M. (myco)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :)

Autor: Ing. ET (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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".

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.