#javascript #audio
#javascript #Аудио
Вопрос:
У меня есть список узлов аудиофайлов, и я хотел бы инициировать звуковой цикл после нажатия кнопки воспроизведения. Аудиофайлы должны воспроизводиться один за другим, если их не прерывать вручную. Это аудиофайл в html
<div class="audio-tracks">
<audio data-key="65" src="My_Tracks/Beat for Greg.mp3"></audio>
<audio id="Beat For Greg" class="tracks" src="My_Tracks/Beat for Greg.mp3"></audio>
<audio data-key="83" src="My_Tracks/The Sound Of Africa.mp3"></audio>
<audio id="The Sound Of Africa" class="tracks" src="My_Tracks/The Sound Of Africa.mp3"></audio>
<audio data-key="68" src="My_Tracks/Hip hop reagea.mp3"></audio>
<audio id="Hip Hop Regea" class="tracks" src="My_Tracks/Hip hop reagea.mp3"></audio>
<audio data-key="70" src="My_Tracks/dancehall 2.mp3"></audio>
<audio id="Dancehall Track" class="tracks" src="My_Tracks/dancehall 2.mp3"></audio>
<audio data-key="71" src="My_Tracks/dancehall5.mp3"></audio>
<audio id="Another Dancehall Track" class="tracks" src="My_Tracks/dancehall5.mp3"></audio>
<audio data-key="72" src="My_Tracks/Angels sing.wav"></audio>
<audio id="Angels sing" class="tracks" src="My_Tracks/Angels sing.wav"></audio>
<audio data-key="74" src="My_Tracks/Dreams of peace 2.wav"></audio>
<audio id="Dreams Of Peace" class="tracks" src="My_Tracks/Dreams of peace 2.wav"></audio>
<audio data-key="75" src="My_Tracks/Yours faithfully.wav"></audio>
<audio id="Yours Faithfully" class="tracks" src="My_Tracks/Yours faithfully.wav"></audio>
<audio data-key="76" src="My_Tracks/Hard.mp3"></audio>
<audio id="Hard" class="tracks" src="My_Tracks/Hard.mp3"></audio>
<audio data-key="90" src="My_Tracks/Gotta be good.mp3"></audio>
<audio id="Gotta Be Good" class="tracks" src="My_Tracks/Gotta be good.mp3"></audio>
<audio data-key="76" src="My_Tracks/In my dreams.mp3"></audio>
<audio id="In My Dreams" class="tracks" src="My_Tracks/In my dreams.mp3"></audio>
<audio data-key="90" src="My_Tracks/A Bigger Crowd.wav"></audio>
<audio id="A Bigger Crowd" class="tracks" src="My_Tracks/A Bigger Crowd.wav"></audio>
</div>
Это js-файл, который я написал, чтобы попытаться реализовать это
function globalPlaySound (){
const audio = document.querySelectorAll('.tracks');
for (let i = 0; i < audio.length; i ) {
audio[i].play();
}
}
Когда я запускаю этот код, он воспроизводит ВСЕ аудиофайлы одновременно. Я хочу, чтобы каждый файл воспроизводился индивидуально, начиная с первого дочернего элемента div аудиодорожек.
Комментарии:
1.
audioElement.loop = true;
включено…audioElement.loop = false;
отключено, если вы хотите установить динамически, в противном случае просто используйте<audio loop='true' />
.
Ответ №1:
Вы можете попробовать получить информацию об аудиофайле и получить его продолжительность, затем между циклами вы можете добавить задержку на основе длительности звука. Вы можете проверить, как получить длительность звука, используя HTML File API. https://lostechies.com/derickbailey/2013/09/23/getting-audio-file-information-with-htmls-file-api-and-audio-element/
Ответ №2:
Вот фрагмент кода, который я нашел в Интернете и который работает для меня.
const playList = document.querySelectorAll('.tracks');
let playlist = Array.from(playList);
function playNextSounds (playlist){
if(playlist.length > 0){
const audio = new Audio();
audio.src = playlist[0].src;
audio.currentTime = 0;
audio.play();
playlist.shift();
audio.addEventListener('ended', function(){
playNextSounds(playlist);
})
}
}
playNextSounds(playlist);