Tach allerseits!
Leider gibt es kein Unterforum für die WinAPI. Naja, dann kommt’s halt hier rein:
Folgende Aufgabe: Ich habe momentan ein Spaß-/Lernprojekt(ja, sowas kann man kombinieren:wink: in Form einer Sound SoftDSP für den PC.
Mein Prinzip bissher ist eine Eimerkette aus drei Buffern. Jeweils einer von Dreien wird grade mit Sounddaten geschrieben. Parallel dazu wird aus dem nächsten sound abgespielt. In dem Übernächsten(immer relativ zum aufzeichnenden buffer) ist grade nix los. Der wird allerdings an die eigentliche DSP weitergereicht, welche dann die Soundeffekte auf den buffer anwendet.
Meine Streamerklasse, die dieses Prinzip umsetzt, arbeitet mit dem API wave interface(WaveInOpen, …PrepareBuffer, usw). Im speziellen habe ich drei buffer mit jeweils zwei headern, die darauf prepared werden. Einen InHeader(WaveInPrepareHeader) und einen OutHeader. Da dies eine open loop Anwendung ist muss ich sowohl ständig buffer zum Abspielen als auch welche zum Aufzeichnen nachliefern. Logischerweise sorge ich dafür, dass die drei buffer wie oben beschrieben im Kreis belegt werden. Zur Synchronisierung verwende ich Funktions callbacks. Und grade die machen mir das Leben schwer:
Das Problem ist eigentlich rein ästhetischer Natur. Mein Ziel war eigenltich eine Gesammtverzögerung(bedingt durch das buffering) von unter 60ms. Sprich 20ms in jedem Teilbuffer. Das schaffe ich nur nicht.
Ich habe das Problem bissher nur bis auf die API zurückführen können. Wie es scheint, sind die WaveOutWrite und WaveInAddBuffer Aufrufe zu lahm. Die Prozessorauslastung dümpelt auf idled Niveau herrum aber trotzdem komme ich nicht unter 80ms pro buffer.
Hat da jemand eine Idee wie man das tunen kann? Eventuell denke ich ja auch zu kompliziert und ich hätte mir die Arbeit sparen können.
Gibt es Vorschläge?
Thor