Я хочу сыграть случайную песню на сайте. Мелодии короткие (максимум несколько секунд, они не требуют предварительной загрузки или буферизации).
Эта часть работает, количество песен может быть неограниченным, потому что tunes.length автоматически считает все песни.
tunes.length
document.write отображает URL-адрес произвольной песни на экране
document.write
tunes = new Array( '"http://example.net/abcd.ogg"', '"http://example.net/efgh.ogg"', '"http://example.net/ijkl.ogg"' ) var audiopath = (tunes[Math.floor(Math.random() * tunes.length)]) document.write (audiopath)
Эта часть также работает, когда URL-адрес определен как константа.
var song = new audio('http://example.net/abcd.ogg'); song.play();
Когда я пытаюсь заменить постоянный URL-адрес переменной audiopath, он не воспроизводится. Может быть что-то не так с синтаксисом Я пытался запустить его с одинарными кавычками и без них в URL '"<a href="http://example.net/ijkl.ogg" rel="nofollow noreferrer">http://example.net/ijkl.ogg</a>"' или "<a href="http://example.net/ijkl.ogg" rel="nofollow noreferrer">http://example.net/ijkl.ogg</a>"
audiopath
'"<a href="http://example.net/ijkl.ogg" rel="nofollow noreferrer">http://example.net/ijkl.ogg</a>"'
"<a href="http://example.net/ijkl.ogg" rel="nofollow noreferrer">http://example.net/ijkl.ogg</a>"
var song = new audio(audiopath); song.play();
Может быть лучше обработать начало воспроизведения после полной загрузки песни. Примерно так:
let loaded = false; const song = new Audio(); song.addEventListener('loadeddata', function() { loaded = true; song.play(); }, false); song.addEventListener('error' , function() { alert('error loading audio'); }, false); song.src = tunes[Math.floor(Math.random() * tunes.length)];