play_effect(src, loop) {
    let effect;
    if (window.isDesktop) {
      // on desktop, use streaming sfx
      // get effect or create new for src
      effect = this.take_from_pool(src);
      if (effect == null) {
        effect = new sound_effect_object(src);
      }
      effect.set_loop(loop);

      // add to list of active effects
      this._sfx.push(effect);

      // play effect
      this._play(effect, 0.0, this.get_sfx_volume());

      // when effect ends
      effect.when_ended().then(() => {
        // remove from sfx list
        this._sfx = _.without(this._sfx, effect);
      });
    } else {
      // on web, use cocos sfx
      effect = cc.audioEngine.playEffect(src, loop);
    }

    // update sfx volume as it is based on number of sfx playing
    this._update_sfx_volume();

    return effect;
  }
Plays a sound effect and returns the sound effect object.
@param {String} src
@param {Boolean} [loop=false]
@returns {audio_object}