OnMusicEnd

Discuss any general programming issues here
Flinx
Posts: 188
Joined: Sun Feb 14, 2021 9:54 am
Location: Germany

Re: OnMusicEnd

Post by Flinx »

That means, I should not call CloseMusic() from the EventHandler for OnMusicEnd?
Nevertheless, with a try by IsMusicPlaying() the program works.

My next step is to find out what avcodec makes better in Windows than in Linux.
User avatar
airsoftsoftwair
Posts: 5433
Joined: Fri Feb 12, 2010 2:33 pm
Location: Germany
Contact:

Re: OnMusicEnd

Post by airsoftsoftwair »

Flinx wrote: Sat May 15, 2021 2:55 pm That means, I should not call CloseMusic() from the EventHandler for OnMusicEnd?
You must not call CloseMusic() before "OnMusicEnd" has triggered. So you must make sure that CloseMusic() is never called before "OnMusicEnd" has triggered for that music. In your example, that's not the case because you do something like:

Code: Select all

Repeat
	OpenMusic(1, "test.mp3")
	PlayMusic(1)
	SongDuration = GetAttribute(#MUSIC, 1, #ATTRDURATION)
	SeekMusic(1, SongDuration-1500)

	WaitEvent
	Wait(20) 
	CloseMusic(1)  ; !!! this might be called before Hollywood calls your "OnMusicEnd" handler !!!
Forever
Flinx
Posts: 188
Joined: Sun Feb 14, 2021 9:54 am
Location: Germany

Re: OnMusicEnd

Post by Flinx »

I see that my second example was nonsense because I simply added SetInterval, the real program structure is different.
In my script I have a user interface where a click should start the same action like the OnMusicEnd event: Close the current music and skip to the next. This is in the function p_ToNextMusic (hence the name in the example), there I call a second function (StopMusic) with CloseMusic() and then open the next. This function is called in both cases (from the mouse click event and from the handler for OnMusicEnd), so one time after the EventHandler was triggered and one time without.
Do I understand correctly that this should not be done?
User avatar
airsoftsoftwair
Posts: 5433
Joined: Fri Feb 12, 2010 2:33 pm
Location: Germany
Contact:

Re: OnMusicEnd

Post by airsoftsoftwair »

Flinx wrote: Tue Jun 01, 2021 1:44 pm I see that my second example was nonsense because I simply added SetInterval, the real program structure is different.
In my script I have a user interface where a click should start the same action like the OnMusicEnd event: Close the current music and skip to the next. This is in the function p_ToNextMusic (hence the name in the example), there I call a second function (StopMusic) with CloseMusic() and then open the next. This function is called in both cases (from the mouse click event and from the handler for OnMusicEnd), so one time after the EventHandler was triggered and one time without.
Do I understand correctly that this should not be done?
Hmm, actually, if your p_ToNextMusic() is called *after* OnMusicEnd has triggered it shouldn't cause any problems. The crash should only occur if p_ToNextMusic() is called *before* Hollywood has called your OnMusicEnd callback...
Post Reply