我正在测试我在android上的一个小音频应用程序中找到的代码,但我有些卡住了。

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本质上是上述函数的 Angular 部分。接下来,ph取值:
ph += twopi * fr/sr;

在这里,fr / sr是Frequency / Sample_Rate。另外,请注意:
SAMPLE_TIME = 1 / SAMPLE_RATE

关于android - 这个ph参数是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17777082/

10-10 10:21