Сценарий, который я использовал в течение длительного времени, не будет работать, если я не удалю некоторые аудиоссылки из списка аудиофайлов, которые будут воспроизводиться на веб-сайте. Я абсолютно не знаю, чем это вызвано.
<script>
var collection=[];
var loadedIndex=0;
function init(audios) {
for(var i=0;i<audios.length;i++) {
var audio = new Audio(audios[i]);
collection.push(audio);
buffer(audio);
}
}
function buffer(audio) {
if (audio.readyState==4)return loaded();
setTimeout(function(){buffer(audio)},100);
}
function loaded() {
loadedIndex++;
if (collection.length==loadedIndex)playLooped();
}
function playLooped() {
var audio=Math.floor(Math.random() * (collection.length));
audio=collection[audio];
audio.play();
setTimeout(playLooped,audio.duration*1000);
}
init([
// (Every single audio file link that I have inserted)
]);
</script>
Основная цель сценария — выбрать случайный фрагмент аудио для воспроизведения при загрузке веб-сайта, а когда выбранный аудиофайл перестает воспроизводиться, он выбирает другой случайный трек для воспроизведения и так далее и тому подобное.
Все работало хорошо, поэтому я продолжал добавлять все больше и больше треков, пока он внезапно не перестал работать. Единственный способ исправить это — удалить некоторые из списка, за исключением того, что я не хотел ничего удалять, потому что треки были потрясающими / идеально подходили для сайта.
Поиск решения тоже не помог. Так что теперь я ищу способ воспроизвести множество треков, которые я вставил в этот скрипт, не нарушая его.
Downloads.khinsider.com (видеоигровая музыка)
Archive.org (я размещаю музыку из видеоигр 199X / 200X, если не могу найти ее на сайте VGM)
Ссылки на archive.org: https://ia601403.us.archive.org/20/items/passport1_202210/passport1.mp3
Ссылки на ВГМ: https://vgmsite.com/soundtracks/3d-minigolf-deluxe/wgbpcldrlj/Theme1.mp3
Это не значит, что ссылки, которые я использую, сломаны или удалены, нет. Они отлично работают и ни один не был удален/не будет удален в будущем. Я проверил каждую ссылку в списке, и ни одна не потеряна.
<script>
var collection=[];
var loadedIndex=0;
function init(audios) {
for(var i=0;i<audios.length;i++) {
var audio = new Audio(audios[i]);
collection.push(audio);
buffer(audio);
}
}
function buffer(audio) {
if (audio.readyState==4)return loaded();
setTimeout(function(){buffer(audio)},100);
}
function loaded() {
loadedIndex++;
if (collection.length==loadedIndex)playLooped();
}
function playLooped() {
var audio=Math.floor(Math.random() * (collection.length));
audio=collection[audio];
audio.play();
setTimeout(playLooped,audio.duration*1000);
}
init([
'https://ia601509.us.archive.org/29/items/theme-1_202209/Theme1.mp3',
'https://vgmsite.com/soundtracks/pilotwings-64-n64/shmuvxyn/03%20Game%20Menu.mp3',
'https://vgmsite.com/soundtracks/1080-snowboarding-original-soundtrack/kyuermtcti/13%20review%20%28Replay%20Time%29.mp3',
'https://vgmsite.com/soundtracks/1080-snowboarding-original-soundtrack/xzooycupop/16%20white%20out%20%28Last%20Name%20Entry%29.mp3',
'https://vgmsite.com/soundtracks/pilotwings-64-n64/wcldvwrd/09%20Rocket%20Belt.mp3',
'https://vgmsite.com/soundtracks/super-smash-bros.-64/mdqmottw/02%20-%20How%20to%20Play.mp3',
'https://vgmsite.com/soundtracks/super-smash-bros.-64/mbbfevmu/04%20-%20Main%20Menu.mp3',
'https://vgmsite.com/soundtracks/banjo-kazooie-complete/cmibeqpaly/020.%20Mumbo%27s%20Mountain%20-%20Aquatics.mp3',
'https://vgmsite.com/soundtracks/donkey-kong-country/hhvtfdcu/02%20-%20Simian%20Segue.mp3',
'https://vgmsite.com/soundtracks/earthbound-snes/lshsbyfpgm/30%20Onett%20Theme.mp3',
'https://vgmsite.com/soundtracks/3d-minigolf-deluxe/wgbpcldrlj/Theme1.mp3',
'https://vgmsite.com/soundtracks/chicken-invaders-pentalogy-the-complete-soundtrack/sggrynne/02-01.%20Main%20Theme.mp3',
'https://vgmsite.com/soundtracks/commander-keen-4/owjkodrw/004%20-%20Robert%20Prince%20-%20Too%20Hot.mp3',
'https://vgmsite.com/soundtracks/commander-keen-5/dphrvepv/004%20-%20Robert%20Prince%20-%20The%20Omegamatic.mp3',
'https://vgmsite.com/soundtracks/commander-keen-5/vmliftfu/009%20-%20Robert%20Prince%20-%20Security%20Center.mp3',
'https://vgmsite.com/soundtracks/commander-keen-5/qbtuakmh/008%20-%20Robert%20Prince%20-%20High%20Score%20Table.mp3',
'https://vgmsite.com/soundtracks/commander-keen-5/ahxngboh/006%20-%20Robert%20Prince%20-%20Game%20Over.mp3',
'https://vgmsite.com/soundtracks/old-school-runescape/gaccwkehoq/Harmony.mp3',
'https://vgmsite.com/soundtracks/forsaken/xsnwaknf/06%20-%20pure%20bitch%20power.mp3',
'https://vgmsite.com/soundtracks/hypnospace-outlaw-ost-vol.-2/vsxlvpwlze/06%20-%20Tuba%20Buffet%27s%20Brass%20Shade.mp3',
'https://vgmsite.com/soundtracks/3d-minigolf-deluxe/ovanelsobo/Theme.mp3',
'https://vgmsite.com/soundtracks/hypnospace-outlaw-ost-vol.-2/kxnwqerdwn/14%20-%20Cave%20Drip.mp3',
'https://vgmsite.com/soundtracks/unreal-tournament-original-soundtrack/rytublyiyw/02.%20Unreal%20Tournament%20Menu.mp3',
'https://vgmsite.com/soundtracks/lego-island-the-complete-soundtrack/ohklmzln/02%20-%20Opening%20Theme.mp3',
'https://vgmsite.com/soundtracks/lego-island-the-complete-soundtrack/orsxlxvb/16%20-%20Pizzeria%20%28Beach%20Blvd.%29.mp3',
'https://vgmsite.com/soundtracks/lego-island-remastered-cassetes/mdrtvaguth/LEGO%20Island%20Theme-01.mp3',
'https://vgmsite.com/soundtracks/lego-island-the-complete-soundtrack/snhsyvxs/03%20-%20The%20Information%20Center.mp3',
'https://vgmsite.com/soundtracks/lego-island-remastered-cassetes/skdekgugcq/Information%20Center.mp3',
'https://vgmsite.com/soundtracks/lego-island-the-complete-soundtrack/enszvoam/04%20-%20Elevator.mp3',
'https://vgmsite.com/soundtracks/lego-island-the-complete-soundtrack/gyzziywx/09%20-%20The%20Medical%20Center.mp3',
'https://vgmsite.com/soundtracks/lego-island-the-complete-soundtrack/elsedwlu/32%20-%20Police%20Station.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/ncedmvrowy/XP%20Tour%20Music.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/bkbmzikopv/title.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/xmrmylwpfs/Windows%20XP%20Critical%20Stop.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/pludoospat/Windows%20XP%20Default.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/wxlfkiicfz/Windows%20XP%20Ding.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/eriixoucwi/Windows%20XP%20Error.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/uqfxdlhpiz/Windows%20XP%20Exclamation.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/cicfoxlvih/Windows%20XP%20Shutdown.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/gpdwfdkrxx/Windows%20XP%20Startup.mp3',
'https://vgmsite.com/soundtracks/windows-xp-windows-gamerip-2001/evvwkdwoqs/Windows%20XP%20Recycle.mp3',
'https://ia804608.us.archive.org/27/items/776e6c6f6164732f496d61676/Kalimba.mp3',
'https://vgmsite.com/soundtracks/club-penguin-gamerip-2005-pc-mobile/egxkhnbyvu/Pizzatron%203000.mp3',
'https://ia803200.us.archive.org/11/items/club-penguin-music/12%20-%20Jazzy%20Pizza%20Ambience.mp3',
'https://ia803200.us.archive.org/11/items/club-penguin-music/20%20-%20Charlies%20Here%20Ambience.mp3',
'https://ia903200.us.archive.org/11/items/club-penguin-music/20%20-%20Charlies%20Here.mp3',
'https://vgmsite.com/soundtracks/toontown-rewritten-ost/efgjbrotfp/Main%20Theme%20Live%20-%201.%20Main%20Theme%20%28Phase%201%20-%20Relaxed%29.mp3',
'https://vgmsite.com/soundtracks/toontown-rewritten-ost/gkhswdozxh/Main%20Theme%20Live%20-%202.%20Main%20Theme%20%28Phase%202%20-%20Active%29.mp3',
'https://vgmsite.com/soundtracks/toontown-online/osftrqbock/Introduction%202.%20Create-a-Toon.mp3',
'https://vgmsite.com/soundtracks/toontown-online/imtfjziarb/Neighborhood%2001.%20Toontown%20Central%20-%20Playground.mp3',
'https://vgmsite.com/soundtracks/toontown-online/bxblzigevc/Neighborhood%2002.%20Toontown%20Central%20-%20Building.mp3',
'https://vgmsite.com/soundtracks/mario-paint-game-rip/lcjeyuuohe/15%20Creative%20Exercise.mp3',
'https://ia801002.us.archive.org/31/items/HoverWindowsOST/Track%202.mp3',
'https://ia801002.us.archive.org/31/items/HoverWindowsOST/Track%201.mp3',
'https://ia601403.us.archive.org/20/items/passport1_202210/passport1.mp3',
'https://ia601403.us.archive.org/20/items/passport1_202210/passport2.mp3',
'https://vgmsite.com/soundtracks/3d-frog-frenzy/aojqlxdjyq/01%20MainMenu.mp3',
'https://vgmsite.com/soundtracks/3d-frog-frenzy/lmviuuhrfq/03%20City.mp3',
'https://vgmsite.com/soundtracks/hudson-selection-vol.-2-star-soldier-psp/zjdaxhtj/01%20-%20BGM%2001.mp3',
'https://vgmsite.com/soundtracks/unreal-windows-1998/wktwjboxsq/1-01%20Flight%20Castle.mp3',
'https://vgmsite.com/soundtracks/descent-1-remake-d1x-rebirth-sc-55-version-gamerip/rygqatae/descent.mp3',
'https://ia801405.us.archive.org/6/items/total-distortion-bgm-bedroom/Total%20Distortion%20-%20BGM%20%28Approach%20the%20Pod%29.mp3',
'https://ia601405.us.archive.org/6/items/total-distortion-bgm-bedroom/Total%20Distortion%20-%20BGM%20%28Bedroom%29.mp3',
'https://ia801405.us.archive.org/6/items/total-distortion-bgm-bedroom/Total%20Distortion%20-%20BGM%20%28Media%20Room%29.mp3',
'https://ia801405.us.archive.org/6/items/total-distortion-bgm-bedroom/Total%20Distortion%20-%20BGM%20%28Settings%29.mp3',
'https://vgmsite.com/soundtracks/super-mario-rpg-1996-snes/jojhnpopmv/1-19%20-%20Fight%20Against%20an%20Armed%20Boss.mp3',
'https://vgmsite.com/soundtracks/duke-nukem-3d/cqddfvjn/01%20grabbag%20~%20theme%20from%20duke%20nukem%203d.mp3',
'https://vgmsite.com/soundtracks/007-goldeneye-64/piaypemc/1-03%20Mission%20Briefing.mp3',
'https://vgmsite.com/soundtracks/deus-ex-original-game-audio/txloomvd/085%20unatco%20%28part%201%29.mp3',
'https://vgmsite.com/soundtracks/deus-ex-original-game-audio/vypjdfaj/086%20unatco%20%28part%202%29.mp3',
'https://vgmsite.com/soundtracks/deus-ex-original-game-audio/jymdbqtk/002%20title%20-%20deus%20ex.mp3',
'https://vgmsite.com/soundtracks/super-hockey-94-snes/ygjvodrkil/02%20Menu.mp3',
'https://vgmsite.com/soundtracks/super-hockey-94-snes/fkdbtzksdx/03%20Game%20Match%201.mp3',
'https://vgmsite.com/soundtracks/perfect-dark-64/lcwnkvyrso/2-07%20Pause%20Menu.mp3'
]);
</script>
Мы говорим об аудиофайлах, которые вы размещаете на своем собственном сервере, или вы просто вводите абсолютный URL-адрес файлов на удаленных серверах, которые даже не находятся под вашим контролем?
Я обновил пост.
Вопрос пока не ясен. Вы говорите, что он снова начинает работать, когда вы удаляете некоторые из этих URL-адресов ... хорошо, вы пытались понять, что не так с этими URL-адресами? каким образом это не работает, когда это не так? вы просто не слышите музыку или у вас явные ошибки в консоли? с кодом, которым вы поделились, трудно справиться еще и потому, что он опирается на не перечисленные переменные во внешней области. Но поскольку проблема зависит от некоторых URL-адресов, которые после удаления из списка решают проблему ... ну, здесь недостаточно информации
Я согласен с Диего Д. пожалуйста, сделайте фрагмент кода выше воспроизводимым. поэтому, когда мы запускаем его, он вызывает ту же ошибку, что и вы.
Хорошо, тогда я опубликую весь фрагмент кода (я также могу просто дать вам ссылку на сам сайт)
Хорошо, я добавил весь сценарий.
4 ссылки не работают.
Скрипт никогда не запускается, потому что он хочет, чтобы все ссылки/аудио работали в этой строке:
If (collection.length==loadedIndex)playLooped();
Функция буфера проверяет, загружен ли каждый аудиофайл в буфер браузера, ждет 100 мс, а затем повторяет попытку, пока звук не достигнет readyState 4. нет никакой логики, определяющей, когда песня не может быть загружена. поэтому он продолжает пытаться вечно, и вышеуказанное условие никогда не выполняется.
Я изменил ваш фрагмент на stackblitz. вы можете попробовать его там и поиграть с ним.
Моя модифицированная версия не пуленепробиваемая. это просто показать вам, что не так. он пытается 300 раз буферизовать песню. если это невозможно, он удаляет песню из массива collection и сообщает функции loading не увеличивать индекс.
Это означает
buffer
ждет 300 * 100 мс для каждой песни, которую она не может загрузить, например, сценарий начнет воспроизводиться через 30 с, если есть хотя бы одна песня, которая медленно буферизуется / не найденаmaxRetries
зависит от интернет-соединения пользователя, он не знает, требуется ли много времени для буферизации песни, пока она не будет готова к воспроизведению, или если URL-адрес песни не существует.var collection = [];
var loadedIndex = 0;
var retries = {};
var maxRetries = 300;
function init(audios) {
for (var i = 0; i < audios.length; i++) {
var audio = new Audio(audios[i]);
collection.push(audio);
retries[audio.src] = 0;
buffer(audio);
}
}
function buffer(audio) {
retries[audio.src]++;
if (retries[audio.src] > maxRetries) {
var idxInvalidAudio = collection.findIndex((el) => el === audio);
console.error(`${collection[idxInvalidAudio].src} cannot be loaded`);
collection.splice(idxInvalidAudio, 1);
return loaded(false);
}
if (audio.readyState == 4) {
return loaded(true);
}
setTimeout(function () {
buffer(audio);
}, 100);
}
function loaded(incrementFlag) {
if (incrementFlag) {
loadedIndex++;
}
if (collection.length == loadedIndex) {
playLooped();
}
}
function playLooped() {
var audio = Math.floor(Math.random() * collection.length);
audio = collection[audio];
audio.play();
setTimeout(playLooped, audio.duration * 1000);
}
init([
// urls...
])
Кстати: мне очень нравится ваш тщательно подобранный список мелодий ;)
Почему бы вам не добавить код прямо в ответ?
Это сделало трюк! Мои поздравления, милостивый государь! Спасибо, что объяснили это тоже, я собирался об этой проблеме в течение почти месяца. "Кстати: мне очень нравится твой тщательно подобранный список мелодий ;)" Приятно слышать. Мой сайт находится по адресу antichair.neocities.org (Просто следуйте инструкциям по настройке вида и наслаждайтесь!)
@darkbee, ты прав. я изменил фрагмент. теперь я отслеживаю количество повторных попыток в глобальной переменной, а не рекурсивно, как раньше.
Привет, было бы полезно иметь воспроизводимый пример. не могли бы вы включить ссылки, из-за которых он перестает работать?