function play(sound_name, loop = false, onend, volume) {
	const sound = audioTracks[sound_name];
	if (sound && typeof sound !== "undefined") {
		const id = sound.play();
		if (typeof loop === "boolean") {
			// arg[0] can take different types in howler 2.0
			sound.loop(loop, id);
		}
		sound.volume(
			typeof volume === "number" ? clamp(volume, 0.0, 1.0) : Howler.volume(),
			id,
		);
		if (typeof onend === "function") {
			if (loop === true) {
				sound.on("end", onend, id);
			} else {
				sound.once("end", onend, id);
			}
		}
		return id;
	} else {
		throw new Error("audio clip " + sound_name + " does not exist");
	}
}
play the specified sound
@param {string} sound_name - audio clip name - case sensitive
@param {boolean} [loop=false] - loop audio
@param {Function} [onend] - Function to call when sound instance ends playing.
@param {number} [volume=default] - Float specifying volume (0.0 - 1.0 values accepted).
@returns {number} the sound instance ID.
@example
// play the "cling" audio clip
me.audio.play("cling");
// play & repeat the "engine" audio clip
me.audio.play("engine", true);
// play the "gameover_sfx" audio clip and call myFunc when finished
me.audio.play("gameover_sfx", false, myFunc);
// play the "gameover_sfx" audio clip with a lower volume level
me.audio.play("gameover_sfx", false, null, 0.5);