2017-03-25 4 views
2

개인의 청력도 (http://howdeaf.com)를 기반으로 난청을 모델링하는 작은 웹 앱이 있습니다. 본질적으로, 그것은 간다 :자바 스크립트 웹 오디오를 사용하여 특정 주파수 범위를 왜곡하는 방법은 무엇입니까?

source -> 2-ch splitter -> 6 inline frequency separators -> merge node -> destination -> 6 inline frequency separators ->

주파수 분리기는이 코드를 사용하여 작성됩니다

for (let i = 0; i < bandSplit.length; i++) { 
    for (let j in sides) { 
     var side = sides[j]; 
     let filterNode = context.createBiquadFilter(); 
     filterNode.frequency.value = bandSplit[i]; 
     if (i === 0) 
      filterNode.type = 'lowshelf'; 
     else if (i === bandSplit.length - 1) 
      filterNode.type = 'highshelf'; 
     else 
      filterNode.type = 'peaking'; 
     filterNode.gain.value = 0.0; 

     this.eqNodes[side].push(filterNode); 

     if (i > 0) 
      this.eqNodes[side][i - 1].connect(this.eqNodes[side][i]); 
    } 
} 

나는 12 개 주파수 분리의 각 노드에 게인을 조정, 그것은 꽤 깔끔한 시뮬레이션입니다.

각 12 개의 바이 쿼드 필터 노드에 서로 다른 커브 값을 사용하여 왜곡 (createWaveShaper() 사용)을 개별적으로 추가하고 싶지만 개별 주파수 만 왜곡하지 않았습니다. 내가 만든 왜곡 노드는 해당 채널의 전체 오디오 출력에 영향을줍니다.

주파수 선택 노드에 왜곡을 개별적으로 적용 할 수있는 방법이 있습니까?

+0

WaveShaper 노드는 어디에 두었습니까? –

+0

@RaymondToy 각 바이 쿼드 노드에 WaveShaper를 연결하려고 시도했지만 분명히 잘못되었습니다. 이것은 바이 쿼드 필터가 목표로하는 주파수뿐만 아니라 통과하는 모든 사운드를 형성합니다. 나는 그 대신에 시리즈, 소스 -> 스플리터 -> [biquad -> 웨이브 셰이퍼] -> 합병 -> 목적지 (각각 12 개 [각] 채널 중 12 개) 대신 병렬로 배열했지만 어느 것도 작동하지 않았다. –

답변

0

귀하의 필터 중 2 개를 제외한 모든 필터는 이득이 0 인 피킹 필터입니다. 기본적으로 모든 것을 통과시킵니다. 따라서 적용하는 모든 웨이브 폼이 전체 주파수 대역에 적용됩니다. 응답의 그래프를 보려면 예를 들어 http://googlechrome.github.io/web-audio-samples/samples/audio/mag-phase.html을 참조하십시오.

대역 통과 필터와 같은 다른 종류의 필터를 사용할 것을 고려하십시오. 이것은 응용 프로그램에 적합하지 않을 수 있지만, 적어도 이러한 필터는 모든 주파수를 통과시키지 않습니다.

+0

어떤 수단으로도 오디오 엔지니어가 아니므로, 나는 틀린 일을하고 있다고 확신합니다. 처음에는 각 주파수 범위에서 게인을 개별적으로 조정하려고했습니다. 나의 셋업은 그것을 달성했지만 어쩌면 허풍을 친다. 당신은 더 깨끗한 접근법을 가지고 있습니까? 두 번째 목표는 각 주파수 범위에 다시 왜곡을 추가하는 것입니다. 평행 한 밴드 패스 필터가 이것을 허용합니까? –

+0

네, 대역 통과 필터의 병렬 세트가이를 허용합니다. 결과가 기본적으로 평평 해 지도록 대역폭과 중심 주파수를 신중하게 선택해야합니다. 그것이 얼마나 쉬운 지 확신하지 못합니다. 그런 다음 각 출력에 왜곡을 적용 할 수 있습니다. 그러나 필터는 완벽하지 않으므로 주파수에 약간의 겹침이 생겨 일부 왜곡이 다른 대역으로 넘치게됩니다. –

+0

"Q 값"을 읽고 몇 가지 그래프를 보았습니다. 그래서 "겹침"이 무엇을 의미하는지 생각해 봅니다. 그리고 그래프가 정확하고 내 Q가 완료되면 최소한으로 받아 들일 수있을 것이라고 생각합니다. 권리). 그것을 테스트하고 결과 코드를 게시합니다. 팁 고마워. –