老师,这个波形为什么抓取出来是这个样子?应该是连续的sin吧?这个是从你发的网盘链接里面下载的 我用播放器画出的波形。
声音听起来是下面“失真的Chirp”声音:
我自己使用单片机, 发出的声音不太一样,但是波形就是您之前推文里的那个,就像下面的波形图所显示的那样。
刚才是我自己单片机生成的波形 老师发的chirp.wav,用Matplot没问题。但是从喇叭里面发出来,就会很奇怪,而且播放器上面的波形也不对。
在生成最终的声音.wav文件的时候,使用的是16bit整型数。在python程序中为:
wavefile.setparams((1, 2, 10000, wavelen, 'NONE', 'Tsinghua'))
函数中的参数定义分别是:(nchannels, sampwidth, framerate, nframes, comptype, compname),
生成wave波形数据使用公式如下,这将产生带有符号的16位整形数字:
Chip波形前面300个数据点绘制的波形如下:
在写入wave文件之前,需要将生成的数据转换成无符号整形数字,使用二进制补码方式进行转换:
sd = int(sin(angle * 2 * pi) * 0x3fff)
if sd < 0: sd = 0x10000+sd
这样wave文件的波形就变成如下图所示了:
而在之前没有按照二进制补码方式转换,而是直接采用16位无符号整形数来表示音频数据,转换的程序代码如下:
sd = int(sin(angle * 2 * pi) * 0x3fff) + 0x7fff
这样绘制出来的波形如下。虽然它的波形完整,但与.wav文件所使用的有符号16位整型数据不符合,所以播放出来的声音出现较大的失真。
谢谢你反馈的信息,根据前面的分析,重新修改了chirp波形文件生成python程序。点击下面二维码可以查看在CSDN上相关博文中的Python程序。
正确WAVE文件格式的Chirp声音文件下载地址:
链接:
https://pan.baidu.com/s/19qLZbABSISm8q2gA2V6Afw
提取码: wrk2