Изменение громкости при воспроизведении перекрывающихся файлов wav с помощью Web Audio API

В Google Chrome:

Один файл .wav воспроизводится в цикле. Время от времени в качестве звукового эффекта воспроизводится другой файл .wav.

Когда воспроизводится звуковой эффект, громкость повторяющегося звука автоматически уменьшается. Громкость снова постепенно увеличивается примерно в течение 15 секунд.

(Я предполагаю, что это автоматически уклоняется http://en.wikipedia.org/wiki/Ducking )

Я не хочу, чтобы громкость цикла уменьшалась при воспроизведении звукового эффекта. Как я могу предотвратить такое поведение?

Пример: http://www.matthewgatland.com/games/takedown/play/web/audiofail.html

window.AudioContext = window.AudioContext||window.webkitAudioContext;
var context = new AudioContext();

var play = function (buffer, loop) {
    var source = context.createBufferSource();
    source.buffer = buffer;
    if (loop) source.loop = true;
    source.connect(context.destination);
    source.start(0);
};

var load = function (url, callback) {
    var request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.responseType = 'arraybuffer';
    request.onload = function() {
    context.decodeAudioData(request.response, function(buffer) {
          callback(buffer);
        }, null);
    };
    request.send();
};

var musicSound;
var thudSound;
load("res/snd/music0.wav", function (buffer) {
    musicSound = buffer;
});
load("res/snd/thud0.wav", function (buffer) {
    thudSound = buffer;
});

Как только звуки загрузятся, вызовите:

play(musicSound, true); //start the music looping

//each time you call this, the music becomes quiet for a few seconds
play(thudSound, false);

person Matthew Gatland    schedule 28.07.2013    source источник
comment
Это происходит для меня в Windows 7, но не в OS X.   -  person Matthew Gatland    schedule 28.07.2013
comment
Я бы попробовал это в паре разных браузеров в Windows. Попробуйте Chrome Canary, Safari и, возможно, даже ночную сборку Firefox. Может глюк браузера. Или, может быть, ваша звуковая карта делает что-то странное. Но код, как написано, в порядке.   -  person Kevin Ennis    schedule 29.07.2013
comment
+1 к утверждению Кевина - с вашим кодом все в порядке, и в реализации Chrome Web Audio нет автоматического приглушения (на любой платформе). Я предполагаю, что это автоматическое сжатие, применяемое вашим звуковым устройством в Windows. (В некоторых случаях, подобных этому, глобальное сжатие может звучать как приглушение.)   -  person cwilso    schedule 29.07.2013
comment
Вы правы - это не связано с Chrome или API веб-аудио, похоже, моя звуковая карта реагирует на некоторые плохо спроектированные звуковые эффекты. Доказательством является то, что воспроизведение звуков с использованием других технологий дает тот же результат. Может быть, нам следует удалить этот вопрос? Если только другие не совершат ту же ошибку, что и я.   -  person Matthew Gatland    schedule 29.11.2013


Ответы (1)


Возможно, вам придется сделать звуковой дизайн, прежде чем разместить это на своем веб-сайте. Я не знаю, что вы используете для редактора, но вы можете редактировать звуки вместе, чтобы их общий уровень был ближе к уровню исходного зацикленного звука. Таким образом, разница в уровнях не будет такой резкой, которая вызывает автоматическое снижение усиления. Сочетание обоих звуков слишком громкое, поэтому более громкий из двух понизит уровень более тихого. Поэтому, если вы сблизите их по уровню, общая разница не должна быть такой резкой, когда или если сработает снижение усиления.

person user3003313    schedule 28.11.2013