《电子技术应用》
您所在的位置:首页 > 模拟设计 > 业界动态 > Chirp声音文件格式修改

Chirp声音文件格式修改

2020-03-30
来源:与非网
关键词: 单片机 Chirp

  提问

  老师,这个波形为什么抓取出来是这个样子?应该是连续的 sin 吧?这个是从你发的网盘链接里面下载的 我用播放器画出的波形。

  声音信号绘制波形

forward (2).jpg

  声音听起来是下面“失真的 Chirp”声音:

  我自己使用单片机, 发出的声音不太一样,但是波形就是您之前推文里的那个,就像下面的波形图所显示的那样。

  刚才是我自己单片机生成的波形 老师发的 chirp.wav,用 Matplot 没问题。但是从喇叭里面发出来,就会很奇怪,而且播放器上面的波形也不对。

2.jpg

  自己使用单片机产生的波形

  问题回复

  问题分析

  在生成最终的声音 .wav 文件的时候,使用的是 16bit 整型数。在 python 程序中为:

  wavefile.setparams((1, 2, 10000, wavelen, 'NONE', 'Tsinghua'))

  函数中的参数定义分别是:(nchannels, sampwidth, framerate, nframes, comptype, compname),

  生成 wave 波形数据使用公式如下,这将产生带有符号的 16 位整形数字:

  Chip 波形前面 300 个数据点绘制的波形如下:

3.jpg

  有符合 16 位整型数波形

  在写入 wave 文件之前,需要将生成的数据转换成无符号整形数字,使用二进制补码方式进行转换:

  sd = int(sin(angle * 2 * pi) * 0x3fff)

  if sd < 0: sd = 0x10000+sd

  这样 wave 文件的波形就变成如下图所示了:

4.jpg

  修改成有符合整型数的波形

  而在之前没有按照二进制补码方式转换,而是直接采用 16 位无符号整形数来表示音频数据,转换的程序代码如下:

  sd = int(sin(angle * 2 * pi) * 0x3fff) + 0x7fff

  这样绘制出来的波形如下。虽然它的波形完整,但与 .wav 文件所使用的有符号 16 位整型数据不符合,所以播放出来的声音出现较大的失真。

5.jpg

  无符号 16 整型数波形

  产生声音文件的 PYTHON 程序

  正确 WAVE 文件格式的 Chirp 声音文件下载地址:

  链接:

  https://pan.baidu.com/s/19qLZbABSISm8q2gA2V6Afw

  提取码:  wrk2


本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。