Ich hab mir mal ein paar Dokus zur Digitalen signalverarbeitung zusammen gegoogelt und lees mich mal ins thema ein.
ich hab aber noch ne andere frage....
Ich will die Wave Dateien nicht komplett in den Speicher laden, also hab ich mir gedacht, ich lad die datei stückweise und hau die teile in den DirectSoundBuffer.
Ich teil den Buffer in zwei Teile à 2 Sekunden (nur in gedanken der buffer bleibt am stück) auf und lade wenn ich grad im einen teil bin den anderen neu.
Beim Laden des ersten Teils gibs keine Probleme, nur beim laden des zweiten teils...
Mit
DSB.writebuffer 0,bufferlengts/2,bytearray,DSBLOCK_DEFAULT
lade ich den ersten teil.
ich kann aber den zweiten ledier nicht nicht durch
DSB.writebuffer bufferlength/2,bufferlength/2,bytearray,DSBLOCK_DEFAULT
nicht den zweiten teil laden (da stürtzt mir vb immer ab.
dann hab ich das mal so probiert:
Private Sub tmrDurchlauf_Timer()
Dim DCursor As DSCURSORS
DSB.GetCurrentPosition DCursor
If BufferSektion = 0 And DCursor.lPlay > BufferLength/2 Then
Get #DateiNr, 45 + BufferCount * BufferLength/2, soundBytes
BufferCount = BufferCount + 1
DSB.WriteBuffer 0, BufferLength/2, soundBytes(0), DSBLOCK_DEFAULT
BufferSektion = 1
ElseIf BufferSektion = 1 And DCursor.lPlay < BufferLength/2 Then
Get #DateiNr, 45 + BufferCount * BufferLength/2, soundBytes
BufferCount = BufferCount + 1
DSB.Stop
DSB.GetCurrentPosition DCursor
DSB.SetCurrentPosition BufferLength/2
DSB.WriteBuffer 0, BufferLength/2, soundBytes(0), DSBLOCK_FROMWRITECURSOR
DSB.SetCurrentPosition DCursor.lWrite
DSB.Play DSBPLAY_LOOPING
BufferSektion = 0
End If
End Sub
Das reinladen klappt aber ich hab jedes mal wenn der 2. Teil geladen wird ne (minimale) unterbrechung im sound (wegen den Stop und Start).
Kennt wer ne bessere lösung?