IsSoundPlaying() GetSoundPosition() etc...
Publié : ven. 30/oct./2009 20:47
Trouvé sur le forum Anglais...
Je me dis que ça peut servir ... et je me demande si certaine commande ne sont pas multiplatforme si certain sous linux ou macos veulent tester !
Je me dis que ça peut servir ... et je me demande si certaine commande ne sont pas multiplatforme si certain sous linux ou macos veulent tester !
inc. a écrit :From Stephan Moebius at the http://www.Purebasic-Lounge.de Board:
Code : Tout sélectionner
Structure DSBCAPS dwSize.l dwFlags.l dwBufferBytes.l dwUnlockTransferRate.l dwPlayCpuOverhead.l EndStructure Procedure _DirectSoundCB(guid,desc,module,context) CopyMemory(desc,context,256) ProcedureReturn 0 EndProcedure Procedure IsSoundPlaying(Sound);returns weather the Sound is playing or not. Address=IsSound(Sound) If Address=0:ProcedureReturn 0:EndIf *DSB.IDirectSoundBuffer=PeekL(Address) *DSB\GetStatus(@Status) If Status=1 Or Status=5 ProcedureReturn 1 EndIf ProcedureReturn 0 EndProcedure Procedure GetSoundPosition(Sound);returns the current position of the Sound.(in bytes) Address=IsSound(Sound) If Address=0:ProcedureReturn 0:EndIf *DSB.IDirectSoundBuffer=PeekL(Address) *DSB\GetCurrentPosition(@Position,0) ProcedureReturn Position EndProcedure Procedure SetSoundPosition(Sound,Position);sets the current position of the Sound.(in bytes) Address=IsSound(Sound) If Address=0:ProcedureReturn 0:EndIf *DSB.IDirectSoundBuffer=PeekL(Address) ProcedureReturn *DSB\SetCurrentPosition(Position) EndProcedure Procedure GetSoundSize(Sound);Returns the size of the Sound in bytes. Address=IsSound(Sound) If Address=0:ProcedureReturn 0:EndIf *DSB.IDirectSoundBuffer=PeekL(Address) Caps.DSBCAPS\dwSize=SizeOf(DSBCAPS) *DSB\GetCaps(@Caps) ProcedureReturn Caps\dwBufferBytes EndProcedure Procedure GetSoundFrequency(Sound) Address=IsSound(Sound) If Address=0:ProcedureReturn 0:EndIf *DSB.IDirectSoundBuffer=PeekL(Address) *DSB\GetFrequency(@Freq) ProcedureReturn Freq EndProcedure Procedure.s GetSoundCardName() hModule=GetModuleHandle_("dsound.dll") If hModule=0:ProcedureReturn "":EndIf Addr=GetProcAddress_(hModule,"DirectSoundEnumerateA") If Addr=0:ProcedureReturn "":EndIf String$=Space(256) CallFunctionFast(Addr,@_DirectSoundCB(),String$) ProcedureReturn String$ EndProcedure ;Example: InitSound() MessageRequester("",GetSoundCardName()) File$=OpenFileRequester("Load wav-file","*.wav","wav-file |*.wav",0) Result=LoadSound(1,File$) If Result=0:MessageRequester("ERROR","Can't load sound."):End:EndIf OpenWindow(1,0,0,400,25,#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"Play") PlaySound(1) Repeat Event=WindowEvent() SetWindowTitle(1,Str(GetSoundPosition(1))+"/"+Str(GetSoundSize(1))) Until Event=#PB_Event_CloseWindow Or IsSoundPlaying(1)=0