2013-01-02 4 views
2

그래서 Nudio를 사용하여 C#에서 처음부터 신시사이저를 코딩하고 있습니다. 나는 다른 주파수를 연주했는데 멋진 데, 높은 피치가 낮은 피치보다 훨씬 더 크게 나타납니다. 그 때문에이 효과하는 것입니다주파수 당 동일한 소리 크기

http://en.wikipedia.org/wiki/Equal-loudness_contour

또는 내가 사인파를 생성있을 때 내가 뭔가 잘못하고있는 중이 야? 필자가 필요하다면 Equal-loudness 등고선 곡선을 어떻게 구현합니까?

감사

내 코드 :

NAudio 파형을 나타내는 +1 -1의 범위에있는 부동 소수점 값으로 채워진 버퍼를 기대한다. 주파수 설정

buffer[n + offset] = (float)(Amplitude * Math.Sin(angle)); 
angle = (angle + angleIncrement) % (2 * Math.PI); 

:

사인파를 생성 동등한 소리의 세기 윤곽에 따라 신디사이저의 오디오의 진폭을 제어

public double Frequency 
{ 
    set 
    { 
     angleIncrement = 2 * Math.PI * value/sampleRate; 
    } 
    get 
    { 
     return angleIncrement * sampleRate/2/Math.PI; 
    } 
} 
+0

코드가 정상적으로 보입니다 ('진폭'이 일정한 한). –

+0

'진폭'은 사용자가 음을 얼마나 크게 소리 내고 싶어하는지 나타냅니다. 그것은 내 테스트에서 지금은 일정합니다. 그럴 경우, 큰 소리로 윤곽선을 구현해야한다고 생각하십니까? – John

+0

나는 이미 게시했습니다. "인간의 귀는 그렇게 작동하지 않고 매우 비선형 적입니다." 그래프의 왼쪽에있는 눈금은 대수입니다. 3 dB는 2의 인수와 같습니다. –

답변

1

아마 아니다 원하는 것을 선택하십시오.

이론 상으로는 적절한 윤곽선을 선택하기 위해 스피커에서 생성되는 절대 레벨 (SPL)을 알아야합니다. 실제로 더 큰 문제는 신디사이저를 확장하여 단순한 음색 대신 복잡한 파형을 사용하고, 필터 등으로 처리 할 수 ​​있습니다. 등음도 윤곽은 순수한 톤을 기반으로하며 복잡한 신호를 생성 할 때 (즉, 주파수) 대신 합성 사운드의 라우드니스를 추정하기 위해 라우드니스 모델이 필요합니다.

0

가중치를 사용하는 것이 좋습니다. 소리 크기를 정량화하는 가장 정확한 방법은 아니지만 괜찮습니다. 더 잘하려면 음향학에 깊이 관여해야합니다. More here.