Page 1 of 1

PureBasic Sound Player [Windows]

Posted: Sun May 11, 2025 2:47 am
by RASHAD
Don.t ever use the System Audio
But the Application Audio system
Next is a quick demonstration
With waveOutSetVolume_() you can get your machine audio devices status easily
Have Fun :)

Code: Select all

If InitSound() = 0
  MessageRequester("Error", "Can't initialize the sound system",  0)
  End
EndIf

If InitMovie() = 0
  MessageRequester("Error", "Can't initialize movie playback !", 0)
  End
EndIf

UseFLACSoundDecoder()
UseOGGSoundDecoder()

Global playflag,SoundFileName$

Procedure MediaGetVolume()
  CurrVol = 0
  waveOutGetVolume_(0, @CurrVol)
  CalcVol = CurrVol & $0000ffff
  volume = CalcVol / ($FFFF / $64)
  ProcedureReturn volume         
EndProcedure

Procedure MediaPutVolume(volume)
  NewVolume = (($FFFF / $64) * volume)
  NewVolume = ((NewVolume & $0000ffff) | (NewVolume << 16))
  waveOutSetVolume_(0, NewVolume)                          
EndProcedure

Procedure Loadmedia()
  playflag = 0
  SoundFileName$ = OpenFileRequester("Choose a sound file", "", "Sound files|*.*",0)
  If SoundFileName$
    ext$ = LCase(GetExtensionPart(SoundFileName$))
    If ext$ = "wav" Or ext$ = "ogg" Or ext$ = "flac"
      playflag = 1 
    ElseIf ext$ = "mp3" Or ext$ = "mid"
      playflag = 2
    ElseIf ext$ = "mod" Or ext$ = "xm" Or ext$ = "it"
      playflag = 3
    EndIf
  EndIf
EndProcedure

MediaPutVolume(50)

If MediaGetVolume() = 0
  MessageRequester("Info","1- No Sound Device"+#CRLF$+"2- Sound Output Device is Disabled",#MB_OK|#MB_ICONINFORMATION)
  End
EndIf

OpenWindow(0,0,0,600,400,"PB Sound Player",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

ButtonGadget(0,10,360,70,30,"Load")
ButtonGadget(1,80,360,70,30,"Play")
ButtonGadget(2,150,360,70,30,"Stop")
ButtonGadget(10,300,360,80,30,"Mute")
TrackBarGadget(12,390, 365, 200,30,1,100)
SetGadgetState(12,50)
ButtonGadget(14,10,330,210,30,"Mute/Unmute System")

Repeat
  Select WaitWindowEvent(1)
    Case #PB_Event_CloseWindow
      Quit = 1
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 0
          Loadmedia()
        Case 1
          If playflag = 1
            If LoadSound(0, SoundFileName$)
              MediaPutVolume(GetGadgetState(12))
              PlaySound(0)
            Else
              MessageRequester("Error", "Can't load the sound.", 0)
            EndIf
          ElseIf playflag = 2
            If LoadMovie(0, SoundFileName$)
              MediaPutVolume(GetGadgetState(12))
              PlayMovie(0,0)
            Else
              MessageRequester("Error", "Can't load the sound.", 0)
            EndIf
          ElseIf playflag = 3
            If LoadMusic(0, SoundFileName$)
              MediaPutVolume(GetGadgetState(12))
              PlayMusic(0)
            Else
              MessageRequester("Error", "Can't load the sound.", 0)
            EndIf
          EndIf
        Case 2
          If playflag = 1
            StopSound(0)
          ElseIf playflag = 2        
            StopMovie(0)
          ElseIf playflag = 3
            StopMusic(0)
          EndIf          
        Case 10
          Run ! 1
          If Run = 1
            volume = MediaGetVolume()
            MediaPutVolume(0)
          Else
            SetGadgetState(12,volume)
            MediaPutVolume(volume)
          EndIf
        Case 12
          MediaPutVolume(GetGadgetState(12))
        Case 14
          keybd_event_(#VK_VOLUME_MUTE,0,0,0)
          keybd_event_(#VK_VOLUME_MUTE,0,#KEYEVENTF_KEYUP,0)       
      EndSelect
  EndSelect
Until Quit = 1 
End
Edit :Added check for presence of sound out device and if it's disabled too

Re: PureBasic Sound Player [Windows]

Posted: Sun May 11, 2025 8:55 am
by Jacobus
Hello,
Excellent! Thanks for this feature, I will definitely use it for my mp3 player.

Re: PureBasic Sound Player [Windows]

Posted: Sun May 11, 2025 1:34 pm
by RASHAD
Hi
Thanks Jacobus
Previous post updated
Next to check if the master mixer is muted