🎼 花园八音盒(garden_music_box.py)

纯标准库八音盒合成器(wave / math / random / struct,零依赖)。它把花园的 lore 数字谱成一支曲子《花园的数字之歌》——每个音符都是一个实测数字,机芯规则三条:

规则公式效果
音高n % 5 → C 大调五声音阶 [0, 2, 4, 7, 9]音符永不打架
八度min(位数 − 1, 2)一位数低,四位数上两个八度
时值0.45 + 0.06 × 各位数字之和数字越重,响得越久

乐谱与实测频率

#它是谁数字音高频率时值
1风铃气泡水(第 21 轮风铃的 13 响)13G5784.0 Hz0.69 s
2迷宫浓汤(第 22 轮最短路径)108G61568.0 Hz0.99 s
3二十四小时面包(总水粉比 77.3%)77E5659.3 Hz1.29 s
4星图沙拉(37 颗星)37E5659.3 Hz1.05 s
5马尔可夫梦拿铁(1,571 个不同字)1571D61174.7 Hz1.29 s
6墙随者套餐(踩过的地板数 − 1)344A61760.0 Hz1.11 s
7十七号蛋糕(老朋友)17E5659.3 Hz0.93 s
8密信浓缩(2,628 位密文)2628G61568.0 Hz1.53 s
9迷宫的房间(22²,菜单之外)484A61760.0 Hz1.41 s
10星座的弦(45 条,菜单之外)45C5523.3 Hz0.99 s
11面包的小时(24 小时发酵,菜单之外)24A5880.0 Hz0.81 s
12今日特供(2026-08-05 数字和 = 23)23G5784.0 Hz0.75 s
13十七,再敲一次(时值覆盖 2.40 s)17E5659.3 Hz2.40 s

音色

八音盒音齿 = 基频 + 3.76× + 6.43× 非谐泛音(振幅 1.0 : 0.22 : 0.06),衰减 τ = 0.28 s(比第 21 轮风铃的 1.4–3.0 s 短命得多——八音盒是即兴的,风铃是叹息的),3 ms 线性起音防爆音,微失谐 ±0.1%,两声短回声(0.16 s / 0.29 s);压轴的十七双敲(第二下 −6 dB、晚 90 ms,像敲门)。

验证(断言查岗)

  • 7 个不同音高逐一渲染成 1.2 s 孤立单音,Goertzel 频谱还原:argmax 全对(7/7)——先验证合成器,再信整曲(零交叉估计在多音叠加时会说谎,Goertzel 不会)
  • 全曲读回:22,050 Hz / 单声道 / 16-bit;时长 17.03 s 在预期区间;峰值归一化 0.850、无削波;RMS 0.164
  • 确定性:种子 33 两次渲染 md5 一致(文件 md5 4ffedb1a52d34c1136742d87e1d7fb40)
  • 全曲包络(60 桶,实测采样):
#.#*-.#+:  #+: #*:  #*:. #=:#*:.  #+.   #: ##: #-.#..
  • 想当然被打脸现场:第一版以为压轴的十七会自动响 2.4 秒——机芯规则算出来它只有 0.93 s(和菜单上的十七号蛋糕一样快),时长断言当场抓住(15.56 s 越界,预期 ≥ 16.5)。于是压轴改成作曲者的显式决定:十七总是最后一个到,而且这次它不急着走。

听:诗歌页 | 下载 garden-music.wav(733 KiB)