Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

IDirectSoundNotify werkt alleen met grote WAVbuffers :?

Anoniem
None
1 antwoord
  • 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;
    —————————————————————————-

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.