加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 提问
    • 问题回复
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

Chirp声音文件格式修改

2020/03/30
191
阅读需 2 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

提问

老师,这个波形为什么抓取出来是这个样子?应该是连续的 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 个数据点绘制的波形如下:

有符合 16 位整型数波形

在写入 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 位整型数据不符合,所以播放出来的声音出现较大的失真。

无符号 16 整型数波形

 

产生声音文件的 PYTHON 程序

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

链接: 

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

提取码:  wrk2 

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
XEB1202 1 Okaya Electric America Inc RC Network,
$5.38 查看
ACT45B-510-2P-TL003 1 TDK Corporation of America General Purpose Inductor

ECAD模型

下载ECAD模型
$1.98 查看
MCR100-8RLG 1 Rochester Electronics LLC 0.8A, 600V, SCR, TO-92, LEAD FREE, PLASTIC, CASE 29-11, TO-226AA, 3 PIN
暂无数据 查看

相关推荐

电子产业图谱

公众号TsinghuaJoking主笔。清华大学自动化系教师,研究兴趣范围包括自动控制、智能信息处理、嵌入式电子系统等。全国大学生智能汽车竞赛秘书处主任,技术组组长,网称“卓大大”。