2013-07-21 2 views
1

나는 안드로이드에있는 작은 오디오 앱에서 발견 한이 코드를 테스트 중이었고 뭔가 조금 붙어 있습니다.이 ph 매개 변수는 무엇입니까?

short samples[] = new short[buffsize]; 
int amp = 32767; 
double twopi = 2*Math.PI; 
double fr = 262.f; 
double ph = 0.0; 

while(isRunning) 
{ 
    fr = 262 + 262*sliderval; 

    for(int i=0; i < buffsize; i++) 
    { 
     samples[i] = (short) (amp*Math.sin(ph)); 
     ph += twopi*fr/sr; 
    } 
    audioTrack.write(samples, 0, buffsize); 
} 

나는이 루프 사운드를 합성하기 위해 노력하고 있음을 알고 있지만, 나는 "산도"매개 변수가 무엇인지 모르는이 수학에 맞는 방법 사인파를 생성 할 수 있습니다. 그들이 그것이 무엇인지 아는 사람이 나에게 설명해 주시겠습니까?

답변

0

정현파이 함수로부터 유도된다 : 코드

y(t) = Amplitude * Sin(2* PI * Frequency * SAMPLE_TIME) 

이 라인 :

samples[i] = (short) (amp * Math.sin(ph)); 

본질적 위의 함수이다. for-loop의 첫 번째 실행에서 phzero이므로 계산이 작동합니다. ph은 본질적으로 위 함수에 주어진 각 부분입니다. 다음 ph의 값을 취한다 : 여기

ph += twopi * fr/sr; 

, fr/sr 주파수/SAMPLE_RATE이다. 또한, 참고 사항 :

SAMPLE_TIME = 1/SAMPLE_RATE 
+0

감사합니다! 그것은 실제로 많은 도움이됩니다! –

1

이것은 사인파의 위상입니다. 초기 값은 0이므로 웨이브의 첫 번째 샘플은 0입니다. 그런 다음 각 샘플에 대해 웨이브 폼이 지정된 주파수를 갖도록 증가됩니다.

는 이상이 수학 문제 ... 어쨌든 단계에

자세한 정보는 당신이 필요합니다 보이는 : Wikipedia - Phase(waves) 위의 코드에서

0

ph단계의 배터리입니다.

온 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 두 관계를 다음

  1. 주파수는 시간에 대한 위상 변화의 속도입니다. 루프 라운드마다로서 N

모든 정수 값

  • Sin(x) = Sin(x + N * 2 * PI)는 샘플들 사이의 위상차가 위상 누산기에 첨가된다.

  • 관련 문제