# limitations under the License.
# App audio abstraction
+# Default behaviour is loading the audio from the `assets` folder of the project with its name and extension
+# Platforms implementations can modify this comportement
#
# Once the application has started (after `App.setup`)
# use `App.load_sound` to get a sound
module audio
import app_base
+import core::error
-# Abstraction of a sound
-abstract class Sound
+# Platform variations
+# TODO: move on the platform once qualified names are understand in the condition
+import linux::audio is conditional(linux)
+import android::audio is conditional(android)
+
+# Abstraction of a playable Audio
+abstract class PlayableAudio
+
+ # Name of this playable audio
+ var name: String
+
+ # Error which is not null if an error happened
+ var error: nullable Error = null is writable
+
+ # Is this already loaded ?
+ protected var is_loaded = false is writable
+
+ # Load this playable audio
+ fun load is abstract
# Plays the sound
fun play is abstract
fun resume is abstract
end
+# Abstraction of a short sound
+class Sound
+ super PlayableAudio
+end
+
+# Abstraction of a long song, that can bee looped
+class Music
+ super PlayableAudio
+end
+
redef class App
- # Loads a sound from the assets of the app, returns `null` if the loading failed
- fun load_sound(name: String): nullable Sound do return null
+ # Load a sound
+ fun load_sound(name: String): Sound is abstract
+
+ # Load a music
+ fun load_music(name: String): Music is abstract
end