}
`}
- fun create(context: NativeActivity, id: Int): NativeMediaPlayer in "Java" `{
+ new create(context: NativeActivity, id: Int): NativeMediaPlayer
+ in "Java" `{
try {
- return self.create(context, (int)id);
+ return MediaPlayer.create(context, (int)id);
}catch(Exception e) {
return null;
}
# Used to play sound, best suited for sounds effects in apps or games
class SoundPool
- # Error gestion
+ # Latest error on this sound pool
var error: nullable Error = null
private var nsoundpool: NativeSoundPool is noinit
+
# The maximum number of simultaneous streams for this SoundPool
var max_streams = 10 is writable
# Init the mediaplayer with a sound resource id
init from_id(context: NativeActivity, id: Int) do
- self.nmedia_player = new NativeMediaPlayer
- self.nmedia_player = nmedia_player.create(context, id)
+ self.nmedia_player = new NativeMediaPlayer.create(context, id)
if self.nmedia_player.is_java_null then
self.error = new Error("Failed to create the MediaPlayer")
self.sound = new Music.priv_init(id, self, self.error)
reset
destroy
end
- self.nmedia_player = self.nmedia_player.create(context, id)
+
+ self.nmedia_player = new NativeMediaPlayer.create(context, id)
if self.nmedia_player.is_java_null then
self.error = new Error("Failed to load a sound")
self.sound = new Music.priv_init(id, self, new Error("Sound loading failed"))
end
redef class PlayableAudio
+ # Flag to know if the user paused the sound
+ # Used when the app pause all sounds or resume all sounds
+ var paused: Bool = false
+
redef init do add_to_sounds(self)
end
redef fun pause do
if self.error != null or not self.is_loaded then return
soundpool.pause_stream(soundpool_id)
+ paused = true
end
redef fun resume do
if self.error != null or not self.is_loaded then return
soundpool.resume(soundpool_id)
+ paused = false
end
end
redef fun pause do
if self.error != null or not self.is_loaded then return
media_player.pause
+ paused = true
end
redef fun resume do
if self.error != null or not self.is_loaded then return
play
+ paused = false
end
end
var default_soundpool: SoundPool is lazy do return new SoundPool
# Get the native audio manager
- fun audio_manager: NativeAudioManager import native_activity in "Java" `{
+ private fun audio_manager: NativeAudioManager import native_activity in "Java" `{
return (AudioManager)App_native_activity(self).getSystemService(Context.AUDIO_SERVICE);
`}
redef fun on_pause do
super
- for s in sounds do s.pause
+ for s in sounds do
+ # Pausing sounds that are not already paused by user
+ # `s.paused` is set to false because `pause` set it to true
+ # and we want to know which sound has been paused by the user
+ # and which one has been paused by the app
+ if not s.paused then
+ s.pause
+ s.paused = false
+ end
+ end
audio_manager.abandon_audio_focus
end
redef fun on_resume do
super
audio_manager.request_audio_focus
- for s in sounds do s.resume
+ for s in sounds do
+ # Resumes only the sounds paused by the App
+ if not s.paused then s.resume
+ end
end
end