anoniem Geplaatst: 17 april 2003 Delen Geplaatst: 17 april 2003 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; ---------------------------------------------------------------------------- Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen