Adds a SoundTrackPlayer class
diff --git a/examples/game/lib/sound.dart b/examples/game/lib/sound.dart
index 5794837..4856a36 100644
--- a/examples/game/lib/sound.dart
+++ b/examples/game/lib/sound.dart
@@ -156,3 +156,76 @@
     _playingSounds = [];
   }
 }
+
+typedef void SoundTrackCallback(SoundTrack);
+typedef void SoundTrackBufferingCallback(SoundTrack, int);
+
+class SoundTrack {
+  MediaPlayerProxy _player;
+
+  SoundTrackCallback onSoundComplete;
+  SoundTrackCallback onSeekComplete;
+  SoundTrackBufferingCallback onBufferingUpdate;
+  bool loop;
+  double time;
+}
+
+SoundTrackPlayer _sharedSoundTrackPlayer;
+
+class SoundTrackPlayer {
+  List<SoundTrack> _soundTracks = [];
+
+  static sharedInstance() {
+    if (_sharedSoundTrackPlayer == null) {
+      _sharedSoundTrackPlayer = new SoundTrackPlayer();
+    }
+    return _sharedSoundTrackPlayer;
+  }
+
+  SoundTrackPlayer() {
+    _mediaService = new MediaServiceProxy.unbound();
+    shell.requestService(null, _mediaService);
+  }
+
+  MediaServiceProxy _mediaService;
+
+  Future<SoundTrack> load(String url) async {
+    // Create media player
+    SoundTrack soundTrack = new SoundTrack();
+    soundTrack._player = new MediaPlayerProxy.unbound();
+    _mediaService.ptr.createPlayer(soundTrack._player);
+
+    // Load and prepare
+    UrlResponse response = await fetchUrl(url);
+    await soundTrack._player.ptr.prepare(response.body);
+
+    return soundTrack;
+  }
+
+  void unload(SoundTrack soundTrack) {
+    stop(soundTrack);
+    _soundTracks.remove(soundTrack);
+  }
+
+  void play(
+    SoundTrack soundTrack,
+    [bool loop = false,
+      double volume,
+      double startTime = 0.0]) {
+    // TODO: Implement looping & volume
+    // soundTrack._player.ptr.setLooping(loop);
+    // soundTrack._player.ptr.setVolume(volume);
+    soundTrack._player.ptr.seekTo((startTime * 1000.0).toInt());
+    soundTrack._player.ptr.start();
+  }
+
+  void stop(SoundTrack track) {
+    track._player.ptr.pause();
+  }
+
+  void stopAll() {
+    for (SoundTrack soundTrack in _soundTracks) {
+      soundTrack._player.ptr.pause();
+    }
+  }
+}