tests: update sav/test_parser* because AST changes
[nit.git] / lib / app / audio.nit
index de68bb9..42d90ae 100644 (file)
@@ -15,6 +15,8 @@
 # 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
@@ -36,8 +56,21 @@ abstract class Sound
        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