#
# ~~~nitish
# # Note that you need to specify the path from "assets" folder and the extension
-# var s = app.load_sound("sounds/test_sound.ogg")
-# var m = app.load_music("sounds/test_music.ogg")
+# var s = new Sound("sounds/test_sound.ogg")
+# var m = new Music("sounds/test_music.ogg")
# s.play
# m.play
# ~~~
}
`}
fun reset in "Java" `{ self.reset(); `}
+
+ # HACK for bug #845
+ redef fun new_global_ref import sys, Sys.jni_env `{
+ Sys sys = NativeMediaPlayer_sys(self);
+ JNIEnv *env = Sys_jni_env(sys);
+ return (*env)->NewGlobalRef(env, self);
+ `}
end
# Sound Pool from Java, used to play sounds simultaneously
fun stop(stream_id: Int) in "Java" `{ self.stop((int)stream_id); `}
fun unload(sound_id: Int): Bool in "Java" `{ return self.unload((int)sound_id); `}
fun release in "Java" `{ self.release(); `}
+
+ # HACK for bug #845
+ redef fun new_global_ref import sys, Sys.jni_env `{
+ Sys sys = NativeSoundPool_sys(self);
+ JNIEnv *env = Sys_jni_env(sys);
+ return (*env)->NewGlobalRef(env, self);
+ `}
end
# Stream priority
private var priority = 1
- init do self.nsoundpool = new NativeSoundPool(max_streams, stream_type, src_quality)
+ init do self.nsoundpool = (new NativeSoundPool(max_streams, stream_type, src_quality)).new_global_ref
# Load the sound from an asset file descriptor
# this function is for advanced use
# Create a new MediaPlayer, but no sound is attached, you'll need
# to use `load_sound` before using it
- init do self.nmedia_player = new NativeMediaPlayer
+ init do self.nmedia_player = (new NativeMediaPlayer).new_global_ref
# Init the mediaplayer with a sound resource id
init from_id(context: NativeActivity, id: Int) do
redef fun load do
if is_loaded then return
- var retval_resources = app.default_soundpool.load_name_rid(app.resource_manager, app.native_activity, path.strip_extension)
- if retval_resources == -1 then
- self.error = new Error("Failed to load " + path)
+
+ # Try resources (res)
+ var rid = app.default_soundpool.load_name_rid(app.resource_manager, app.native_activity, path.strip_extension)
+ if rid > 0 then
+ self.soundpool_id = rid
+ self.soundpool = app.default_soundpool
+ self.error = null
+ self.soundpool.error = null
+ else
+ # Try assets
var nam = app.asset_manager.open_fd(path)
if nam.is_java_null then
self.error = new Error("Failed to get file descriptor for " + path)
else
var retval_assets = app.default_soundpool.load_asset_fd_rid(nam)
+ nam.close
if retval_assets == -1 then
self.error = new Error("Failed to load " + path)
else
self.soundpool.error = null
end
end
- else
- self.soundpool_id = retval_resources
- self.soundpool = app.default_soundpool
- self.error = null
- self.soundpool.error = null
end
is_loaded = true
redef fun load do
if is_loaded then return
- var mp_sound_resources = app.default_mediaplayer.load_sound(app.resource_manager.raw_id(path.strip_extension), app.native_activity)
- if mp_sound_resources.error != null then
+
+ # Try resources (res)
+ var rid = app.resource_manager.raw_id(path.strip_extension)
+ if rid > 0 then
+ var mp_sound_resources = app.default_mediaplayer.load_sound(rid, app.native_activity)
+ if mp_sound_resources.error != null then
+ self.media_player = app.default_mediaplayer
+ self.error = null
+ self.media_player.error = null
+ end
self.error = mp_sound_resources.error
+ else
+ # Try assets
var nam = app.asset_manager.open_fd(path)
if nam.is_java_null then
self.error = new Error("Failed to get file descriptor for " + path)
else
var mp_sound_assets = app.default_mediaplayer.data_source_fd(nam)
+ nam.close
if mp_sound_assets.error != null then
self.error = mp_sound_assets.error
else
self.media_player.error = null
end
end
- else
- self.media_player = app.default_mediaplayer
- self.error = null
- self.media_player.error = null
end
is_loaded = true