16共 23 讲10 分钟

同一批数,为什么换个画法才看得见:用 Python 画声谱图

上一课已经把一段录音变成了一张「哪个高低成分、在哪一段时间、有多强」的大表格。这一课把它真的画出来。可第一次画出来的图几乎是全黑的——不是算错了,是上色的方式不对:这张表里 99.70% 的格子都不到最强那一格的百分之一,硬按比例分配颜色,它们全挤进同一种黑。换成分贝上色,再把纵轴改成按倍数刻,同一批数就全都看得见了。

二十三课中的第十六课,把上一课的矩阵真正画成一张能读的图

上一课手写了那套做法——用一扇窗在录音上一格一格往右挪,每挪到一个位置就算一次频率,把每次的结果排成一列。这套做法叫短时傅里叶变换。那一课留下三个没查的问题:现成的库默认会不会在录音两端补东西?画图时画的是模还是功率?颜色和纵轴要不要换成对数?这一课把三个都查掉。

完整代码在第 16 课脚本,运行环境沿用课程总纲里的一次性配置。

先听四段声音

这一课要用四个文件。第一个是一段一格一格往上爬的音阶,后三个是三种风格的音乐,各 30 秒。

  1. 音阶:scale.wav
  2. 德彪西,古典:debussy.wav
  3. 红辣椒乐队,摇滚:redhot.wav
  4. 艾灵顿公爵,爵士:duke.wav

载入之后打印一下:

scale     174943 个样本,  7.93 秒
debussy   661500 个样本, 30.00 秒
redhot    661500 个样本, 30.00 秒
duke      661500 个样本, 30.00 秒

四段都被重采样到同一个采样率 22050 Hz。第 04 课说过原因:采样率不一样,同一个数组位置对应的频率就不一样,后面所有比较都会错位。

先用音阶那一段。它的好处是答案已经写在耳朵里——音一格一格往上走,画出来也应该一格一格往上走。图对不对,一眼就能判。

互动持续版

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

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

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