2015-11-28 76 views
0

虽然回来,我遇到了PiFM,并决定学习一些关于音频和调制。我正在尝试编写一个AFSK调制器,但首先我想生成纯音,比如1000Hz。我使用PiFM项目中的代码(https://github.com/rm-hull/pifm/blob/master/pifm.cpp),该代码读取WAV文件并通过RF发送出去。我想要做同样的事情,但我想通过RF拍出纯正的音调。树莓派PiFM生成音色

这里是我的尝试之一:

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秒钟。但是我没有得到任何东西或噪音。你们可以建议如何解决这个问题,或者是一些很好的阅读材料吗?

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

回答

0

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

+0

好眼睛,但仍然没有运气。我将幅度更改为固定值(请参阅上面的代码)。我在接收端得到的所有信息都是crack啪声(噪音)。 – Davidus