先调库,再手写,然后逼它们对上
这一课实现剩下的两个时域特征。做法和上一课不同:先用 librosa 一行算出来,再从零手写一遍,然后把两个结果逐帧比对。 这一步不是走形式——数值对不上,就说明你和库对「一帧是哪些样本」的理解不一样,后面所有比较都不成立。均方根这边两边严丝合缝(逐帧最大差 8×10⁻⁹);过零率那边故意对不上,比值正好是 1024/1023——这正是第 07 课留下的那个「除以 K 还是除以 K−1」。
第 1 步:先用 librosa 算一遍
import librosa
y, sr = io.load("debussy", seconds=3)
r = librosa.feature.rms(y=y, frame_length=1024, hop_length=512, center=False)[0]
形状 (128,)
前 5 帧
[0.05299, 0.05962, 0.0672,
0.07602, 0.0753]
一行就出结果。 128 帧,和第 06 课手算的帧数一致。
注意 center=False 这个参数——上一课量过,center=True 会在两头各补半帧的零,多出两帧。这里关掉它,才能和自己写的对上。
互动持续版
静态图文到这里,接下来让声音和图形动起来
购买后解锁完整课程,以及只有官网互动版才能提供的声音、动画和可操作实验。
- 完整声音对比、分步动画与 8 个交互实验
- 微信账号登录,手机和电脑同步访问
- 申请加入课程会员群,交流、反馈和接收更新
- 持续获得这门课程的勘误与内容升级