我正在尝试在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++;
}
我做错了什么?我听到的声音很低,而不是正弦波。
答案 0 :(得分:0)
回答我自己的问题。
Rtaudio以棘手的方式处理输出缓冲区。浮点数组不适用于单个单声道,它包含代表每个通道一帧的插槽,后面是下一帧的几个插槽等。由于此输出有2个通道,因此键校正为:
outputbuffer[2 * i] = v;
仅在一个频道上输出。