这个ph参数是什么?

问题描述:

我正在测试这个代码,我发现一个小的音频应用程序在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值”参数是什么以及它如何融入数学产生正弦波。如果有人知道它是什么,有人可以向我解释吗?

正弦波从该函数导出:

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

谢谢!这实际上有很大帮助! –

这是正弦波的相位。初始值为0,因此波形的第一个样本为0.然后,对于每个样本,它会递增,因此波形具有指定的频率。

看起来更加的数学问题,反正...在阶段

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

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

以下两个关系可能会有助于理解正在发生的事情:

  1. 频率相对于时间的相位变化率。
  2. Sin(x) = Sin(x + N * 2 * PI)N

由于每个时间循环回路的所有整数值,样本之间的相位差被加到到相位累加器。