2017-11-18 24 views
1

재생을 중단하지 않고도 필터 노드를 제거 할 수 있습니까? 노드 그래프가 "무언가를 끄기"위해 재구성되어야한다는 것을 이해하는 한? 웹 오디오 API - 재생 중 필터 제거

Source-->GainNode-->LowpassFilter-->HighshelfFilter-->Destination 

그래서 내가 꺼짐 HighshelfFilter ON/전환하고 싶지만 재생의 오디오를 중지하지 않고 작동하지 않습니다

내 그래프는 다음과 같습니다.

나는 또한 filter.type = 'allpass';으로 설정하려고 시도했지만 이상한 음향 효과가 발생합니다.

답변

0

이렇게하는 가장 좋은 방법은 병렬 연결을 설정하는 것입니다. 하나는 필터링과 직접 연결 한 다음 교차 페이드하는 것입니다 (예 : 각각 이득 노드가 있고 이득 노드 중 하나는 0.0으로 설정되고 다른 하나는 1.0). 라우팅과 같을 것이다 :

Source-->GainNode1-->LowpassFilter-->HighshelfFilter-->Destination 
     ↳->GainNode2-----------------------------------↗︎ 
1.0에 0.0으로 설정 게인 노드 중 하나는 함께 시작

, 다음과 같이 그들 사이를 전환 :

// activate the filters - using setTarget to do a fast crossfade will avoid clicks 
gainNode1.gain.setTargetAtTime(1.0, audioCtx.currentTime + 1, 0.001); 
// deactivate the direct line 
gainNode2.gain.setTargetAtTime(0.0, audioCtx.currentTime + 1, 0.001); 

당신은 수, 당신이 제안, 중요한 영향을 미치지 않도록 필터 자체를 변경하십시오. all-pass 대신 0.0의 .gain을 갖는 "peaking"유형의 필터를 사용해보십시오. 나는 이것이 모든 위상 관계에 어떤 영향을 미치는지 정확하게 알지 못한다. (이것이 allpass가 이상하게 들리는 이유이다).

마지막으로 노드를 연결 해제했다가 다시 연결할 수 있습니다. 활성 오디오가 있으면 클릭 또는 팝이 발생합니다. (위에서 언급 한 샘플이하는 것입니다.)