回来时,我遇到了PiFM,并决定学习一些有关音频和调制的知识。我正在尝试编写AFSK调制器,但首先我想生成纯净的音调,例如1000Hz。我正在使用来自PiFM项目(https://github.com/rm-hull/pifm/blob/master/pifm.cpp)的代码,该项目读取WAV文件并通过RF将其发射出去。我想做同样的事情,但我想通过RF发出纯净的音调。
这是我的尝试之一:
void playSineWave(float frequency, int duration, float samplerate)
{
SampleSink* ss;
ss = new Outputter(samplerate);
int bufferLen = duration * samplerate;
float* buffer = new float[bufferLen];
for (int i = 0; i < bufferLen; i++) {
float amplitude = 6000;
buffer[i] = amplitude * sin( (2.f * float(M_PI) * i * frequency) / samplerate );
}
cout << "Buffer length: " << bufferLen << endl;
ss->consume(buffer, bufferLen);
delete [] buffer;
}
我会用它作为
playSineWave(1000, 5, 22050);
来播放1000Hz音调5秒钟。但是我什么也没得到,也没有声音。你们可以建议如何解决它,或者可能是一些好的阅读 Material 吗?编辑:更改代码以解决振幅问题。仍然没有语气。
最佳答案
我不确定是否有意随时间更改amplitude
。无论如何,对于所有小于i / bufferLen * 32760
的(i / bufferLen) * 32760
(在C / C++中查找整数除法),i / bufferLen
的评估结果为i
,并且bufferLen
的值将为0,这是因为for (int i = 0; i < bufferLen; i++)
造成的。