我用c ++编写了一个程序来生成800Hz正弦波的.wav文件(1通道,8位,16000Hz采样,32000个样本,所以2秒长),但是当我在Audacity中播放或检查其频谱图时,它有弦外之音.
我认为问题在于将正弦波转换为PCM的算法; 我不知道在哪里放置'零'位移,在127,或127.5,或128等.
char data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = (char) (round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j / 20.0))));
}
Run Code Online (Sandbox Code Playgroud)
生成的文件是:output.wav
如有必要,这里是cpp文件:wavwriter.cpp
谢谢!
编辑2:我已将char更改为uint8_t
uint8_t data[32000];
for (int j = 0; j < 32000; ++j)
{
data[j] = round(127 + 60 * (sin(2.0 * 3.14159265358979323846264338327950 * j / 20.0)));
}
outfile.write((char *)&data[0], sizeof data);
outfile.close();
return true;
Run Code Online (Sandbox Code Playgroud)
避免未定义的行为.同样的问题仍然适用.