Я использую Howler JS для воспроизведения массива аудиофайлов один за другим.Тем не менее, я хочу, чтобы в какой-то момент я смог уменьшить громкость - и, надеюсь, остановить / отпустить звуки воспроизведения в фоновом режиме.
У меня есть код, который без проблем исчезает из одного файла (опубликовано ниже), но я не могу понять, как постепенно исчезать все аудиофайлы, воспроизводимые из этого массива.Имейте в виду, что мои звуковые файлы занимают всего несколько секунд каждый, поэтому затухание произойдет с несколькими различными звуковыми файлами.
С одним звуком, вы можете нацелиться на него с помощью getSound(soundFileName);
(например, используя var sound = getSound(soundFileName);
, чтобы исчезнуть, используя sound.fade(maxVolume, 0, fadeOut, id2);
), но я не могу понять, как расширить это до спискааудио файлы загружаются из массива.
Вот текущее состояние моего кода, который объединен из двух работающих программ: одна, которая воспроизводит массив файлов, но не нуждается в исчезновении, и другая, которая воспроизводит / повторяет только один аудиофайл, ноисчезает:
playThunder(numberOfSamples, maxVolume, playDuration);
var potentialThunderSounds = [
getSoundB('audio/01.wav', 1, false),
getSoundB('audio/02.wav', 1, false)
];
function getSoundB(soundFileName, volume, loop) {
return new Howl({
src: [soundFileName],
autoplay: false,
loop: loop,
volume: volume,
fade: 0
});
}
function playThunder(numberOfSoundsToPlay, playDuration) {
var soundSequence = [];
for (var x = 0; x < numberOfSoundsToPlay; x++) {
var soundIndex = Math.round(Math.random() * (potentialThunderSounds.length - 1));
soundSequence.push(potentialThunderSounds[soundIndex]);
}
playSoundIfThereIsOne();
function playSoundIfThereIsOne() {
var currentSound = soundSequence[0];
currentSound.play();
soundSequence.shift();
currentSound.once('end', playSoundIfThereIsOne);
}
setTimeout(function() {
sound.fade(maxVolume, 0, fadeOut); // FADE OUT
// Attempt to clean up the sound object
setTimeout(function() {
sound.stop();
sound.unload();
}, fadeOut + 1000);
}, playDuration);
}
Вот рабочий код, который зацикливает и затухает только в одном звуковом файле:
loop(options, playDuration, soundFileName, maxVolume, fadeIn, fadeOut);
function loop(options, playDuration, soundFileName, maxVolume, fadeIn, fadeOut) {
var sound = getSound(soundFileName);
var id2 = sound.play();
sound.volume(0);
sound.fade(0, maxVolume, fadeIn, id2); // FADE IN
setTimeout(function() {
sound.fade(maxVolume, 0, fadeOut, id2); // FADE OUT
// Attempt to clean up the sound object
setTimeout(function() {
sound.stop();
sound.unload();
}, fadeOut + 1000);
}, playDuration);
function getSound(soundFileName) {
return new Howl({
src: [soundFileName],
autoplay: true,
loop: true,
volume: 0,
fade: 0
});
}