同一批数,为什么换个画法才看得见:用 Python 画声谱图
上一课已经把一段录音变成了一张「哪个高低成分、在哪一段时间、有多强」的大表格。这一课把它真的画出来。可第一次画出来的图几乎是全黑的——不是算错了,是上色的方式不对:这张表里 99.70% 的格子都不到最强那一格的百分之一,硬按比例分配颜色,它们全挤进同一种黑。换成分贝上色,再把纵轴改成按倍数刻,同一批数就全都看得见了。
上一课手写了那套做法——用一扇窗在录音上一格一格往右挪,每挪到一个位置就算一次频率,把每次的结果排成一列。这套做法叫短时傅里叶变换。那一课留下三个没查的问题:现成的库默认会不会在录音两端补东西?画图时画的是模还是功率?颜色和纵轴要不要换成对数?这一课把三个都查掉。
完整代码在第 16 课脚本,运行环境沿用课程总纲里的一次性配置。
先听四段声音
这一课要用四个文件。第一个是一段一格一格往上爬的音阶,后三个是三种风格的音乐,各 30 秒。
- 音阶:scale.wav
- 德彪西,古典:debussy.wav
- 红辣椒乐队,摇滚:redhot.wav
- 艾灵顿公爵,爵士:duke.wav
载入之后打印一下:
scale 174943 个样本, 7.93 秒
debussy 661500 个样本, 30.00 秒
redhot 661500 个样本, 30.00 秒
duke 661500 个样本, 30.00 秒
四段都被重采样到同一个采样率 22050 Hz。第 04 课说过原因:采样率不一样,同一个数组位置对应的频率就不一样,后面所有比较都会错位。
先用音阶那一段。它的好处是答案已经写在耳朵里——音一格一格往上走,画出来也应该一格一格往上走。图对不对,一眼就能判。
互动持续版
静态图文到这里,接下来让声音和图形动起来
购买后解锁完整课程,以及只有官网互动版才能提供的声音、动画和可操作实验。
- 完整声音对比、分步动画与 8 个交互实验
- 微信账号登录,手机和电脑同步访问
- 申请加入课程会员群,交流、反馈和接收更新
- 持续获得这门课程的勘误与内容升级