Raspberry Pi使用PiFM生成音调

时间:2015-11-28 21:00:08

标签: c++ audio raspberry-pi

回来后,我遇到了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秒钟。但我得到的不是任何东西或噪音。你们可以建议如何解决它或者一些好的阅读材料吗?

编辑:更改了代码以解决振幅问题。仍然没有语气。

1 个答案:

答案 0 :(得分:0)

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