0
我无法在PortAudio中生成特定频率,每当我尝试更改sin(n * FREQ * 2 * PI/SAMPLE_RATE)
内部的频率时,频率保持不变,但声音似乎在音质上有所变化,较高频率值我把这个声音放在那里,但频率相同。这是我在我的patestCallback
循环:使用PortAudio生成正弦波播放中间C
static int patestCallback(const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo *timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData)
{
paTestData *data = (paTestData*)userData;
float *out = (float*)outputBuffer;
(void) timeInfo;
(void) statusFlags;
(void) inputBuffer;
unsigned long n = 0;
for(unsigned long i = 0; i<framesPerBuffer;i++,n++){
float v = sin (261.626 * 2 * M_PI * ((float) n/(float) TABLE_SIZE));
*out++ = v;
*out++ = v;
}
return paContinue;
}
此建议应该起作用(+1)。另一个解决方案可能是使userData的n部分。这可能会更好,如果你需要重置它外部或最终多个回调或类似的东西。 – 2013-02-13 14:50:40
当然可以。理想情况下,userData将是一个包含实际音频引擎状态的结构或类。 – 2013-02-13 15:19:24
好吧,我把它全部放在一个结构体中,它的功能非常好,谢谢!...我认为我在概念化portaudio的工作方式时遇到了困难,那么在每个framesPerBuffer循环之后它会不断调用patestCallback?另外,是否有可能在输出中写入3或4个正弦波,这样我就可以和弦了? – 2013-02-13 20:29:21