Schreiben in Secondary Soundbuffer?
-
Das füllen eines Secondary Buffer mit Sounddaten läuft wie im DXSDK steht in drei Schritten ab:
1. Buffer locken
2. In Buffer schreiben
3. Buffer unlockenEin Buffer wird mit der Funktion HRESULT Lock(DWORD dwOffset, DWORD dwBytes, LPVOID * ppvAudioPtr1, LPDWORD pdwAudioBytes1, LPVOID * ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags); gelockt.
Die Beschreibung der Parameter hilft mir leider nicht sehr viel weiter – der erste Parameter stellt einen Offset Wert in Bytes dar – ist mir klar - beim Erstellen des Secondary Soundbuffers muss man ja angeben wie groß der Buffer sein soll den man erstellen will - DSBSIZE_MIN and DSBSIZE_MAX (definiert in der Dsound.h) geben an wie groß der Buffer mindestens bzw. wie Groß er maximal in Bytes sein darf.
dwBytes: Große des Beriches den man locken möchte - man könnte z. B. von einem Offset Wert aus einen bestimmten Bereich mit einem Audiosignal beschreiben.
ppvAudioPtr1: Adresse einer Variablen an der der Schreibvorgang beginnt – die Funktion liefert eine Adresse an deren Stelle man die Daten des Audiosignals schreiben kann
und dann wird es kompliziert...
pdwAudioBytes1:
In der DirectX Documentation 9.0 steht folgende Erklärung zu diesem Parameter:
Address of a variable that receives the number of bytes in the block at ppvAudioPtr1. If this value is less than dwBytes, the lock has wrapped and ppvAudioPtr2 points to a second block of data at the beginning of the buffer .
Wrapped? Wie ich gelesen habe soll man sich der Einfachheit halber einen Soundbuffer als Ring vorstellen – da es keinen ringförmigen Speicher gibt, sondern nur einen Liniearen Speicher kann man sich das so vorstellen: Immer wenn der Lesezeiger (beim Abspielen) an das Ende des Speichers gelangt springt er zurück zum Anfang.Also müsste ich hier im Programmcode eine Fallunterscheidung machen zwischen einen gewrappten (dwBytes ungleich dwAudioBytes1) und einen „ungewrappten“ (dwBytes = dwAudioBytes1) Buffer machen?
Habe ich das richtig verstanden?
-
Ich sehe da keine Fallunterscheidung. Bei ppvAudioPtr1 kannst du immer pdwAudioBytes1 Bytes schreiben und bei ppvAudioPtr2 pdwAudioBytes2 Bytes. Dies ist IMHO spätestens in den Remarks eindeutig beschrieben.
Bye, TGGC \-/
-
danke - glaube ich habe es verstanden