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