【发布时间】:2017-10-04 00:55:42
【问题描述】:
我正在尝试在 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++;
}
我做错了什么?我听到的不是正弦波,而是低沉的研磨声。
【问题讨论】:
-
使用你的调试器,让你的调试器显示
timec / SAMPLE_RATE的值。例如,timec为 1 时,1 / 44100为 0。并且该除法的结果将为零,直到timec达到 44100 的值。Sp,前 44100 个样本将被计算为sin(0)。这就是 C++ 的工作原理。 -
@SamVarshavchik 既然 timec 是一个浮点数,它不应该自动提升结果吗?
-
你从哪里得知
timec是一个浮点数?timec的声明未在所示代码中给出,并被假定为int。