Have spent time trying to get my Mp3 Player to work right but just can't over come the bugs in it.
It should play all songs in the listview one after the other unless the user press the stop button.
but it does not work right, In my player you have to select the first song to play before you can play any
and when it is finished playing the highlighted song will change.
Code: Select all
Enumeration playState
#stopped
#paused
#playing
EndEnumeration
Dim mp3list.s(0)
Global mp3Object
Global Count.i = -1
Global Index.i = 0
#FLAGS = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered
mainWin = OpenWindow(#PB_Any, 0, 0, 600, 400, "MP3 Player 0.1", #FLAGS)
AddWindowTimer(mainWin, 0, 1000)
loadBtn = ButtonGadget(#PB_Any, 20, 350, 100, 25, "Add")
stopBtn = ButtonGadget(#PB_Any, 130, 350, 100, 25, "Stop")
playBtn = ButtonGadget(#PB_Any, 240, 350, 100, 25, "Play")
pauseBtn = ButtonGadget(#PB_Any, 350, 350, 100, 25, "Pause")
exitBtn = ButtonGadget(#PB_Any, 460, 350, 100, 25, "Exit")
playlist = ListViewGadget(#PB_Any, 30, 10, 270, 325, #PB_ListView_MultiSelect)
Procedure LoadMp3(File$)
mp3Object = CocoaMessage(0, CocoaMessage(0, 0, "NSSound alloc"),
"initWithContentsOfFile:$", @File$, "byReference:", #YES)
CocoaMessage(0, mp3Object, "play")
EndProcedure
DisableGadget(playBtn, #True)
DisableGadget(stopBtn, #True)
DisableGadget(pauseBtn, #True)
; Start of main loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Timer
If mp3Object
If CocoaMessage(0, mp3Object, "isPlaying")
Else
If state = #playing And Index <= Count
LoadMp3(mp3list(Index))
SetGadgetState(playlist, Index)
Else
state = #stopped
SetGadgetState(playlist, -1)
DisableGadget(playBtn, #False) : DisableGadget(stopBtn, #True)
DisableGadget(loadBtn, #False) : DisableGadget(pauseBtn, #True)
EndIf
EndIf
EndIf
Case #PB_Event_Gadget
Select EventGadget()
Case loadBtn
mp3File$ = OpenFileRequester("Select MP3 Track:", "", "MP3|*.mp3;", 0)
If mp3Object
CocoaMessage(0, mp3Object, "release")
mp3Object = 0
EndIf
If mp3File$ <> ""
AddGadgetItem(playlist, -1, GetFilePart(mp3File$))
Count = (CountGadgetItems(playlist) -1)
ReDim mp3list(Count)
mp3list(Count) = mp3File$
EndIf
Case exitBtn
Quit = #True
Case stopBtn
CocoaMessage(0, mp3Object, "stop")
state = #stopped
DisableGadget(stopBtn, #True)
DisableGadget(loadBtn, #False)
DisableGadget(pauseBtn, #True)
DisableGadget(playBtn, #True)
Case playBtn
Select state
Case #stopped
state = #playing
LoadMp3(mp3list(Index))
DisableGadget(stopBtn, #False)
DisableGadget(pauseBtn, #False)
EndSelect
Case pauseBtn
Select state
Case #paused
CocoaMessage(0, mp3Object, "resume")
state = #playing
Case #playing
CocoaMessage(0, mp3Object, "pause")
state = #paused
EndSelect
Case playlist
If Count > -1
Select EventType()
Case #PB_EventType_LeftClick
Index = GetGadgetState(playlist)
DisableGadget(playBtn, #False) : DisableGadget(stopBtn, #True)
DisableGadget(loadBtn, #True) : DisableGadget(pauseBtn, #True)
EndSelect
EndIf
EndSelect
EndSelect
Until Quit
CocoaMessage(0, mp3Object, "stop")
CocoaMessage(0, mp3Object, "release")