生成正弦波:输出不正确

时间:2017-10-04 00:55:42

标签: c++ audio rtaudio

我正在尝试在rtaudio中生成一个简单的正弦波来验证我理解发生了什么。但是,它出了问题。

我有一个全局float 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++;
}

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

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。

Rtaudio以棘手的方式处理输出缓冲区。浮点数组不适用于单个单声道,它包含代表每个通道一帧的插槽,后面是下一帧的几个插槽等。由于此输出有2个通道,因此键校正为:

outputbuffer[2 * i] = v;

仅在一个频道上输出。