Programmeerbroeders. Ik heb weer eens een probleem, dit keer met DirectSound Notify-Events in Delphi. Ik heb een stukje code opgesteld dat een IDirectSoundBuffer afspeelt, en op bepaalde punten (bytenrs) in die buffer wordt het event Event aangeroepen. Het frappante is alleen, dat dit wel gebeurt bij brass.wav, een wavje van 7 seconden, en niet bij 19long.wav, een wavje van 3 seconden. Dan worden de events niet 'wakker' en blijft hij steeds in de WaitForSingleObject hangne. Ik dacht: wat is er verschillend aan die wavjes? Nou, brass.wav was langer. Ik maak 19long dus langer, 10 seconden, en voila het werkt.
Maar.. dit moet niet zo. He tmoet ook met kortere wavjes werken. Heeft iemand gezien wat ik fout doe ?
----------------------------------------------------------------------------
var
noti: IDirectSoundNotify; // pointer to the interface
waitresult: DWord;
i: Integer;
PosNots : array[0..1] of TDSBPOSITIONNOTIFY;
Event: Integer;
begin
//(47059, 130633) voor 19long.wav
//(90192, 176795) voor brass.wav
setupDirectSoundBuffer('19long.wav');
// setupDirectSoundBuffer('brass.wav');
Event := CreateEvent(nil, false, false, nil);
PosNots[0].dwOffset := 47059 * 4; // dwOffset is in bytes, 1smp = 4 bytes
PosNots[1].dwOffset := 130633 * 4;
PosNots[0].hEventNotify := Event;
PosNots[1].hEventNotify := Event;
DSErrorLog('Querying IDD_IDirectSoundNotify interface', // noti wordt aangemaakt
buffers[0].QueryInterface(IID_IDirectSoundNotify, noti));
noti.SetNotificationPositions(2, @PosNots);
buffers[0].Play(0,0,0); // mijn IDirectSoundBuffer
Log('Waiting for event 1');
waitresult := WaitForSingleObject(Event, INFINITE);
WaitErrorLog('waitresult: ', waitresult);
Log('Ready');
Log('Waiting for event 2');
WaitErrorLog('waitresult: ', waitresult);
waitresult := WaitForSingleObject(Event, INFINITE);
Log('Ready');
end;
----------------------------------------------------------------------------
Maar.. dit moet niet zo. He tmoet ook met kortere wavjes werken. Heeft iemand gezien wat ik fout doe ?
----------------------------------------------------------------------------
var
noti: IDirectSoundNotify; // pointer to the interface
waitresult: DWord;
i: Integer;
PosNots : array[0..1] of TDSBPOSITIONNOTIFY;
Event: Integer;
begin
//(47059, 130633) voor 19long.wav
//(90192, 176795) voor brass.wav
setupDirectSoundBuffer('19long.wav');
// setupDirectSoundBuffer('brass.wav');
Event := CreateEvent(nil, false, false, nil);
PosNots[0].dwOffset := 47059 * 4; // dwOffset is in bytes, 1smp = 4 bytes
PosNots[1].dwOffset := 130633 * 4;
PosNots[0].hEventNotify := Event;
PosNots[1].hEventNotify := Event;
DSErrorLog('Querying IDD_IDirectSoundNotify interface', // noti wordt aangemaakt
buffers[0].QueryInterface(IID_IDirectSoundNotify, noti));
noti.SetNotificationPositions(2, @PosNots);
buffers[0].Play(0,0,0); // mijn IDirectSoundBuffer
Log('Waiting for event 1');
waitresult := WaitForSingleObject(Event, INFINITE);
WaitErrorLog('waitresult: ', waitresult);
Log('Ready');
Log('Waiting for event 2');
WaitErrorLog('waitresult: ', waitresult);
waitresult := WaitForSingleObject(Event, INFINITE);
Log('Ready');
end;
----------------------------------------------------------------------------