把振幅包络的公式,写成真能跑的代码
[上一课](07-三个时域特征-不做频率分析能问出什么.md)把三个公式讲完了,但一行实现都没写。这一课从头做第一个:振幅包络。我们会载入三段音乐、确认基本信息、画出波形、手写包络、把帧编号换算成秒,最后把包络叠到波形上比较三种曲风。中间还会发现一个容易漏掉的 `abs`:它在整段最大值上几乎看不出影响,逐帧检查时却会让三段音乐里 18% 到 36% 的帧被低估。
第 1 步:载入三段音乐,看清基本信息
开始计算前,先确认手上的数据是什么样。
from soundlab import io
for name in ["debussy", "duke", "redhot"]:
y, sr = io.load(name)
print(name, len(y), sr, len(y) / sr)
实测:
样本数 采样率 总时长
古典 661500 22050 30.00s
爵士 661500 22050 30.00s
摇滚 661500 22050 30.00s
一个样本 = 0.0454 毫秒
三个数要看:
- 样本数:一段 30 秒的音乐是 661500 个数。这就是「为什么不能把原始数据直接丢给分类程序」的具体规模。
- 一个样本多久: 毫秒。第 06 课说过,人耳的时间分辨率约 10 毫秒——一个样本比它短两百多倍。
- 第 04 课讲过的采样率:三段完全一致。所以呢? 所以帧编号换算成秒时,三段可以用同一个换算。
互动持续版
静态图文到这里,接下来让声音和图形动起来
购买后解锁完整课程,以及只有官网互动版才能提供的声音、动画和可操作实验。
- 完整声音对比、分步动画与 8 个交互实验
- 微信账号登录,手机和电脑同步访问
- 申请加入课程会员群,交流、反馈和接收更新
- 持续获得这门课程的勘误与内容升级