-3

我正在尝试在 rtaudio 中生成一个简单的正弦波,以验证我了解发生了什么。但是,结果是错误的。

我有一个 globalfloat timec和一个调用的回调openStream,应该用样本填充缓冲区。

float freq = 440; // center frequency
int SAMPLE_RATE = 44100;
for (int i = 0; i < numFrames; i++) {
    float v = sin(2 * M_PI * freq * (timec / SAMPLE_RATE));
    outputbuffer[i] = v;
    timec++;
}

我做错了什么?我听到的不是正弦波,而是低沉的研磨声。

4

1 回答 1

0

回答我自己的问题。

Rtaudio 以一种棘手的方式处理输出缓冲区。浮点数组不是针对单个单声道通道,它包含表示每个通道一帧的插槽,然后是下一帧的多个插槽,等等。由于此输出有 2 个通道,因此关键校正是:

outputbuffer[2 * i] = v;

仅在一个通道上输出。

于 2017-10-04T03:11:56.543 回答