;
; ------------------------------------------------------------
;
; PureBasic - Audio CD example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
NbCDDrives = InitAudioCD()
If NbCDDrives = 0
MessageRequester("Ошибка", "Аудио CD-дисков не найдено...", 0)
End
EndIf
Global Null$
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
; Инициализация констант для упрощения чтения кода
;
#GADGET_Play = 0
#GADGET_Stop = 1
#GADGET_Eject = 2
#GADGET_Close = 3
#GADGET_Select = 4
#GADGET_Status = 5
#GADGET_Time = 6
#GADGET_AudioCDDrive = 7
#GADGET_SelectDrive = 8
Procedure RefreshCD()
ClearGadgetItems(#GADGET_Select)
NbAudioTracks = AudioCDTracks()
For k=1 To NbAudioTracks
AddGadgetItem(#GADGET_Select, -1, "Трэк "+Str(k))
Next
SetGadgetState(#GADGET_Select, 0)
EndProcedure
If OpenWindow(0, 100, 200, 265, 125, "PureBasic - Пример AudioCD", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget (#GADGET_Play , 10, 10, 60 , 24, "Воспр.")
ButtonGadget (#GADGET_Stop , 70, 10, 60 , 24, "Стоп")
ButtonGadget (#GADGET_Eject , 130, 10, 60 , 24, "Изъять")
ButtonGadget (#GADGET_Close , 190, 10, 60 , 24, "Закрыть")
ComboBoxGadget(#GADGET_Select , 10, 43, 240, 24)
TextGadget(#GADGET_Status, 10, 70, 180, 24, "Статус: Остановлено")
TextGadget(#GADGET_Time, 200, 70, 240, 24, "")
TextGadget(#GADGET_AudioCDDrive, 10, 99, 180, 24, "Выберите привод CD-Audio:")
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
RefreshCD()
Repeat
Repeat
Event = WindowEvent() ; На этот раз мы используем неблокирующую команду WindowEvent (), чтобы обновить время
If Event = #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
Else
If Event = #PB_Event_CloseWindow : Quit = 1 : EndIf
EndIf
Until Event = 0
Delay(20) ; Подождите 20 мс, что является длительным периодом для процессора, чтобы не красть всю мощность процессора
; в многозадачных средах, для нашего маленького приложения :)
CurrentTrack = AudioCDStatus()
If CurrentTrack > 0
SetGadgetText(#GADGET_Status, "Playing Track "+Str(CurrentTrack)+" (Length: "+GetHourFormat(AudioCDTrackLength(CurrentTrack))+")")
SetGadgetText(#GADGET_Time, "Время: "+GetHourFormat(AudioCDTrackSeconds()))
DisableGadget(#GADGET_Play, 1)
DisableGadget(#GADGET_Stop, 0)
DisableGadget(#GADGET_Select, 0)
Else
SetGadgetText(#GADGET_Status, "Статус: Остановлено")
SetGadgetText(#GADGET_Time, "")
DisableGadget(#GADGET_Play, 0)
DisableGadget(#GADGET_Stop, 1)
If CurrentTrack = -1 ; CD Привод не готов
DisableGadget(#GADGET_Select, 1)
Else
DisableGadget(#GADGET_Select, 0)
EndIf
EndIf
Until Quit = 1
EndIf
For k=0 To NbCDDrives-1 ; Остановите все CD-приводы, если некоторые из них играют вместе
UseAudioCD(k)
StopAudioCD()
Next
End