2013-07-21 46 views
1

我正在測試這個代碼,我發現一個小的音頻應用程序在Android中,我有點卡住了一些東西。這個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); 
} 

我知道,這個循環工程合成的聲音,但我不知道「pH值」參數是什麼以及它如何融入數學產生正弦波。如果有人知道它是什麼,有人可以向我解釋嗎?

回答

0

正弦波從該函數導出:

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

這行代碼:

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

基本上是上述的功能。在第一次執行for循環時,phzero,因此計算起作用。本質上是給上述函數的角度部分。接着,ph取值:

ph += twopi * fr/sr; 

這裏,fr/sr是頻率/ SAMPLE_RATE。另外請注意:

SAMPLE_TIME = 1/SAMPLE_RATE 
+0

謝謝!這實際上有很大幫助! –

1

這是正弦波的相位。初始值爲0,因此波形的第一個樣本爲0.然後,對於每個樣本,它會遞增,因此波形具有指定的頻率。

看起來更加的數學問題,反正...在階段

更多信息如果你需要:Wikipedia - Phase(waves)

0

在上面的代碼,ph相位累加器

以下兩個關係可能會有助於理解正在發生的事情:

  1. 頻率相對於時間的相位變化率。
  2. Sin(x) = Sin(x + N * 2 * PI)N

由於每個時間循環迴路的所有整數值,樣本之間的相位差被加到到相位累加器。

相關問題