Как уменьшить количество звуков с помощью Howler JS - PullRequest
0 голосов
/ 03 марта 2019

Я использую 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
    });
  }
...