;
; ------------------------------------------------------------
;
; PureBasic - Audio CD example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
NbCDDrives = InitAudioCD()
If NbCDDrives = 0
MessageRequester("Error", "No CD Audio drives found...", 0)
End
EndIf
Procedure.s GetHourFormat(LengthInSeconds)
Minutes = LengthInSeconds/60
Seconds = LengthInSeconds-Minutes*60
If Seconds < 10 : Null$ = "0" : Else : Null$ = "" : EndIf
ProcedureReturn Str(Minutes)+":"+Null$+Str(Seconds)
EndProcedure
; Initialize constants for easier code reading
;
Enumeration
#GADGET_Play
#GADGET_Stop
#GADGET_Eject
#GADGET_Close
#GADGET_Select
#GADGET_Status
#GADGET_Time
#GADGET_AudioCDDrive
#GADGET_SelectDrive
EndEnumeration
Procedure RefreshCD()
ClearGadgetItems(#GADGET_Select)
NbAudioTracks = AudioCDTracks()
For k=1 To NbAudioTracks
AddGadgetItem(#GADGET_Select, -1, "Track "+Str(k))
Next
SetGadgetState(#GADGET_Select, 0)
EndProcedure
If OpenWindow(0, 100, 200, 265, 125, "PureBasic - AudioCD Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget (#GADGET_Play , 10, 10, 60 , 24, "Play")
ButtonGadget (#GADGET_Stop , 70, 10, 60 , 24, "Stop")
ButtonGadget (#GADGET_Eject , 130, 10, 60 , 24, "Eject")
ButtonGadget (#GADGET_Close , 190, 10, 60 , 24, "Close")
ComboBoxGadget(#GADGET_Select , 10, 43, 240, 24)
TextGadget(#GADGET_Status, 10, 70, 180, 24, "Status: stopped")
TextGadget(#GADGET_Time, 200, 70, 240, 24, "")
TextGadget(#GADGET_AudioCDDrive, 10, 99, 180, 24, "Select the CD-Audio drive :")
ComboBoxGadget(#GADGET_SelectDrive, 210, 95, 40, 24)
For k=1 To NbCDDrives
UseAudioCD(k-1)
AddGadgetItem(#GADGET_SelectDrive, -1, Left(AudioCDName(),2))
Next
SetGadgetState(#GADGET_SelectDrive, 0)
UseAudioCD(0)
If NbCDDrives = 1
DisableGadget(#GADGET_SelectDrive, 1)
EndIf
AddWindowTimer(0, 1, 500) ; Check every 200 ms
RefreshCD()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #GADGET_Play
CurrentTrack = GetGadgetState(4)+1
PlayAudioCD(CurrentTrack, CurrentTrack)
Case #GADGET_Stop
StopAudioCD()
Case #GADGET_Eject
EjectAudioCD(1)
Case #GADGET_Close
EjectAudioCD(0)
Case #GADGET_SelectDrive
UseAudioCD(GetGadgetState(#GADGET_SelectDrive))
RefreshCD()
EndSelect
Case #PB_Event_Timer
CurrentTrack = AudioCDStatus()
If CurrentTrack > 0
SetGadgetText(#GADGET_Status, "Playing Track "+Str(CurrentTrack)+" (Length: "+GetHourFormat(AudioCDTrackLength(CurrentTrack))+")")
SetGadgetText(#GADGET_Time, "Time: "+GetHourFormat(AudioCDTrackSeconds()))
DisableGadget(#GADGET_Play, 1)
DisableGadget(#GADGET_Stop, 0)
DisableGadget(#GADGET_Select, 0)
Else
If CurrentTrack = -1
NeedRefresh = 1
SetGadgetText(#GADGET_Status, "Status: No disk detected")
DisableGadget(#GADGET_Select, 1)
Else
SetGadgetText(#GADGET_Status, "Status: Stopped")
DisableGadget(#GADGET_Select, 0)
If NeedRefresh
RefreshCD()
NeedRefresh = 0
EndIf
EndIf
SetGadgetText(#GADGET_Time, "")
DisableGadget(#GADGET_Play, 0)
DisableGadget(#GADGET_Stop, 1)
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
For k=0 To NbCDDrives-1 ; Stop all the CD drives, if some are playing together
UseAudioCD(k)
StopAudioCD()
Next
End