anchor.diff:      soundTrack._player = new MediaPlayerProxy.unbound();
       _mediaService.createPlayer(soundTrack._player);
   
  -    await soundTrack._player.prepare(await pipe);
  -    return soundTrack;
  +    Completer<SoundTrack> completer = new Completer<SoundTrack>();
  +    soundTrack._player.prepare(await pipe, (bool ignored) {
  +      completer.complete(soundTrack);
  +    });
  +    return await completer.future;
     }
   
     /// Unloads a [SoundTrack] from memory.
  
positive.code:     double rightVolume: 1.0,
      bool loop: false,
      double pitch: 1.0
    }) async {
      int streamId = _nextStreamId++;
      SoundPoolPlayResponseParams result = await _soundPool.play(
        sound._soundId, streamId, <double>[leftVolume, rightVolume], loop, pitch
      );
  
      if (result.success) {
        return new SoundEffectStream(this, streamId,
          leftVolume: leftVolume,
          rightVolume: rightVolume,
          pitch: pitch
        );
      }
  
      throw new Exception('Unable to play sound');
    }
  
    /// Set to true to pause a sound effect.
  
negative.code:   int _nextStreamId = 0;
  
    /// Loads a sound effect.
    Future<SoundEffect> load(MojoDataPipeConsumer data) {
      Completer<SoundEffect> completer = new Completer<SoundEffect>();
      _soundPool.load(data, (bool success, int soundId) {
        if (success)
          completer.complete(new SoundEffect(soundId));
        else
          completer.completeError(new Exception('Unable to load sound'));
      });
      return completer.future;
    }
  
    /// Plays a sound effect.
  