Toon posts:

[Delphi]IDirectSoundbuffer: status nooit DSB_STATUS_PLAYING?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een programmatje in Delphi 3 geschreven wat meerdere IDirectSound buffers achterelkaar moet spelen. De bedoeling is dus dat buffer x pas begint met spelen als buffer x-1, indien aanwezig, klaar is met spelen.

Normaal los je dit op door te triggeren op de waarde verkregen door IDirectSoundBuffer.GetStatus. Deze geeft 'DSBSTATUS_PLAYING ' aan als hij aan het spelen is. Maar... wat doet mijn programmatje ? Ik vraag de status op direct achter het play-commando (wat als een thread werkt), en de status is steeds DS_OK !!! Daar hbe ik dus ook niks aan, gezien dat ook de waarde is als de buffer niet speelt.

Weten jullie hoe dit probleem komt en /of kunnen julile mij er mee helpen ??

Mijn code versimpeld:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--------------------------------------------------------------------------------------------------------
procedure speelSequensieel
var
  i, a: integer;
  buffer, currentBuffer: IDirectSoundBuffer;
begin
  stopall; // procedure om bij alle buffers stop() aan te roepen
  currentBuffer := nil;
  for i := 0 to Buffers.Count -1 do
  begin
    if (currentBuffer <> nil) then
    begin
      while currentBuffer.GetStatus(a) = DSBSTATUS_PLAYING do
      begin
        sleep(10);
      end;
    end;
    buffer := buffers[i];
    buffer.play(0,0,0);
    Log('Playing sample ' + inttostr(i));
    LogStatus(buffer.GetStatus(a));  // is dus steeds DS_OK en nooit DSBSTATUS_PLAYING !!
    currentBuffer := buffer;
  end;
end;
--------------------------------------------------------------------------------------------------------

Bij voorbaat dank !

[ Voor 2% gewijzigd door Glimi op 02-04-2003 17:31 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

offtopic:
In het kader van het eerste puntje van deze lijst uit de faq maar even je topictitle aangepast...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • martijn_brinkers
  • Registratie: November 2001
  • Laatst online: 31-10-2025
code:
1
buffer.GetStatus(a));


GetStatus geeft DS_OK terug als de call naar GetStatus gelukt is. Je moet kijken wat a is. Dus a moet DSBSTATUS_PLAYING zijn.

Verwijderd

Topicstarter
Ik snap het !!! Ik verwachtte DSBSTATUS_PLAYING te vinden in de result waarde, en zij stond in a.