+ redef fun play do play_channel(-1, 0)
+
+ # Play this sound on `channel` (or any channel if -1) and return the channel
+ #
+ # Repeat the sound `loops` times, `loops == 0` plays it once,
+ # `loops == 1` plays it twice and `loops == -1` loops infinitely.
+ fun play_channel(channel, loops: Int): Int
+ do
+ var native = native
+
+ if native == null and error == null then
+ # Lazy load
+ load
+
+ # Auto print errors on lazy loading only
+ var error = error
+ if error != null then print_error error
+ end
+
+ # If there's an error, silently skip
+ if error != null then return -1
+ native = self.native
+ assert native != null
+
+ # Play on any available channel
+ return mix.play_channel(channel, native, loops)
+ end