Попробуйте такой вариант:
// перед началом проигрывания создать пустой audio объект
(function () {
var audio = document.createElement('audio');
audio.src = 'http://.../blank.mp3';
audio.load();
window.audio_blank = audio;
})();
window.audio_break = function () {
// в данном случае условно считаем this элементом audio (поправить если не так)
// По идее данная операция должна прерывать текущие загрузки контента
this.pause()
this.currentTime = 0;
this.src = window.audio_blank.src;
};
// Далее в цикле пробегаемся по всем audio и ставим хуки
var audios = document.getElementsByTagName('audio');
for(var i=0; i<audios.length; i++)) {
audios[i].addEventListener('pause', window.audio_break);
}
Теперь перед вызовом play в UI делаем pause на текущем треке.
Соответственно при динамике добавляем хук на каждый вновь создаваемый объект audio.
Так же можно вообще динамически создавать объект audio, чтобы при смене трека его(объект) деинициализировать (читай удалять).
Так же если вы используете один audio тэг для проигрывания, то стоит попробовать предварительно делать
function play(audio, src) {
audio.pause();
audio.currentTime = 0;
audio.src = src;
audio.play();
}
З.Ы. код не проверял, просто оформил в виде идеи