2016-04-14 8 views
2

Я создаю визуализатор с несколькими графическими режимами. Для некоторых из них мне нужно рассчитать ритм воспроизводимой дорожки, и, насколько я понимаю, мне необходимо применить фильтр нижних частот, как показано ниже, для увеличения частот, которые наиболее вероятны для хранения звуков ударных:Web Audio API - Удаление фильтра

Но что, если я хочу отключить фильтр? Должен ли я повторно подключать источник каждый раз, когда мне нужно удалить фильтр? Будет ли это негативно сказываться на производительности?

Связанный вопрос: сколько потеря производительности я испытал бы, если у меня есть два источника из одного источника звука и применить фильтр к одному из них?

+0

Я не понимаю. Почему вы не можете просто подключить свой единственный источник звука к месту назначения напрямую, _and_ к фильтру, который затем подключается к тому, что вы используете для определения bpm? –

+0

@JohnWhite Моя проблема в том, что я хочу переключиться между визуализатором, который реагирует на все частоты, и тот, который просто реагирует на удары. Вы предполагаете, что у меня всегда есть два источника, и один всегда связан с фильтром? –

ответ

2

сколько производительности потери был бы я переживаю, если у меня есть два два источников из одного и того же источника звука и применить фильтр к одному из них

Вы можете подключить один аудиоузел к нескольким адресатам, поэтому вам не нужен дублирующий источник, чтобы его можно было распространять. Если вам нужно фильтруются и необработанный звук одновременно, вы можете просто настроить ваши соединения соответственно:

var filter = context.createBiquadFilter(); 

source.connect(filter); 
source.connect(context.destination); 
filter.connect(context.destination); 

filter.type = "lowpass"; 

В любом случае, установка типа свойства FilterNode в "allpass" эффективно отключить фильтрацию, без необходимости повторного подключения:

filter.type = "allpass" 
+0

Спасибо! Я думал об универсальном проходе, но, согласно MDN, он «пропускает все частоты, но меняет фазовое соотношение между различными частотами». Я боялся фазовых изменений. –

2

Согласно статье WebAudio intro | html5rocks, я бы переключить фильтр и выключается путем отсоединения источника и себя так:

this.source.disconnect(0); 
    this.filter.disconnect(0); 
    // Check if we want to enable the filter. 
    if (filterShouldBeEnabled) { 
    // Connect through the filter. 
    this.source.connect(this.filter); 
    this.filter.connect(context.destination); 
    } else { 
    // Otherwise, connect directly. 
    this.source.connect(context.destination); 
    } 
+0

Я оставляю свой вопрос открытым, если кто-то приходит с лучшим решением. –

+1

Альтернатива: Прикрепите узел усиления между выходом фильтра и context.destination. Когда вы больше не заботитесь о выходе фильтра, установите коэффициент усиления на 0. –

Смежные вопросы