小编Rob*_* No的帖子

写8位PCM正弦波wav文件会产生泛音

我用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)

避免未定义的行为.同样的问题仍然适用.

c++ audio wav pcm modulation

6
推荐指数
1
解决办法
884
查看次数

标签 统计

audio ×1

c++ ×1

modulation ×1

pcm ×1

wav ×1