Raspberry Pi通过PiFM生成音调

Raspberry Pi generate tone with PiFM

本文关键字:PiFM Pi 通过 Raspberry      更新时间:2023-10-16

回来时,我遇到了PiFM,并决定学习一些关于音频和调制的知识。我正在尝试编写一个AFSK调制器,但首先我想生成纯音,比如1000Hz。我正在使用PiFM项目中的代码(https://github.com/rm-hull/pifm/blob/master/pifm.cpp)其读取WAV文件并通过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秒。但我要么什么也得不到,要么有噪音。你们能建议如何修复它吗?或者一些好的阅读材料?

编辑:更改代码以修复振幅问题。仍然没有语气。

我不确定是否有意使amplitude随时间变化。无论如何,对于所有小于bufferLeni(在C/C++中查找整数除法),i / bufferLen * 32760被评估为(i / bufferLen) * 32760,而i / bufferLen将为0,这是因为for (int i = 0; i < bufferLen; i++)