14共 23 讲11 分钟

用 Python 读取真实声音的频谱:四段声音为什么长得不一样?

同样弹一个音,小提琴、钢琴和萨克斯听起来仍然不同;噪声又是另一种样子。这一课把四段录音交给 Python,比较它们在不同频率上的强弱分布,并把横轴读成真正的 Hz。

上一课已经把公式变成了计算机能执行的 FFT。但我们只用 8 个自己造的数字验证了它,还没有把一段真实录音放进去。

这一课不再推导公式。我们会先听四个声音文件,再让程序依次完成读取、FFT、取绝对值和画图。这样做完后,屏幕上的曲线才会和耳朵听到的差别对应起来。

先听四段声音,再让程序处理它们

先别急着计算。我们准备四个文件,并按下面的顺序播放。前三段都让人听出稳定的高低,这种听觉感受叫音高;最后一段没有稳定重复,只剩杂乱的起伏,这种声音叫噪声

  1. 小提琴 C4:violin_c.wav
  2. 钢琴 C5:piano_c.wav
  3. 萨克斯 C4:sax.wav
  4. 噪声:noise.wav

先听很重要。前三段都有明确的音高,却拥有不同的质感;最后一段听不出稳定音高。程序画出的结果,必须能帮助我们解释这个听感差别。

四段声音依次经过读取、快速傅里叶变换、取绝对值和低频范围显示

图 1:注意最后一步只是少画一部分结果。高频仍然参加了 FFT,f_ratio 没有重新计算声音。

互动持续版

静态图文到这里,接下来让声音和图形动起来

购买后解锁完整课程,以及只有官网互动版才能提供的声音、动画和可操作实验。

  • 完整声音对比、分步动画与 8 个交互实验
  • 微信账号登录,手机和电脑同步访问
  • 申请加入课程会员群,交流、反馈和接收更新
  • 持续获得这门课程的勘误与内容升级
支付通道配置中比较免费版与互动版