You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解释Amiga周期与频率转换公式中的魔数8687700

Amiga Period与音高频率转换的魔数疑问

我正在实现一款针对S3M模块的老式音乐追踪器,目前已接近完成,其中一项核心需求是实现Amiga系音乐追踪器(如Protracker、Scream Tracker)中,用于定义音高的period(周期)到音高频率的转换逻辑。

经调研(包括参考Music StackExchange上的相关讨论),理论上的转换公式应为Amiga的PAL时钟频率除以period,即:

3546895 / period

但用这个公式计算出的频率完全错误。

后来我找到一个开源S3M播放器的转换公式:

frequency = 14317056.0 * sample_rate / (8363.0 * 16.0 * period)

但这个公式同样无法得到正确结果,于是我自行调整为:

frequency = (SCREAM_TRACKER_CLOCK_RATE * (MAGIC_NUMBER / sample_rate)) / (AMIGA_MIDDLE_C_RATE * 16.0 * period)

其中各参数的含义:

  • SCREAM_TRACKER_CLOCK_RATE:3579264Hz的4倍,即14317056
  • AMIGA_MIDDLE_C_RATE:8363Hz(Amiga平台中央C对应的period基准值)
  • sample_rate:待播放采样的采样率(比如中央C对应的44100Hz)
  • period:需要转换的Amiga周期值
  • MAGIC_NUMBER:8687700(我通过听觉试错得到的数值)

除了这个魔数外,其他参数的逻辑我都能理解(不过也不清楚公式中16的作用)。如果去掉这个魔数,计算出的音高完全错误。我也可以将公式简化为:

929002505.162523900573614 / (sample_rate * period)

但我希望代码中的公式具备可理解性,而非充斥无意义的魔数,因此想搞清楚:为什么乘以8687700能得到正确结果?

补充说明:这个魔数是我在适配44100Hz采样时得到的,当时公式未将采样率设为变量,该数值等于44100 * 197,而197同样是仅凭听觉试出的,完全不知道其逻辑来源。

内容的提问来源于stack exchange,提问作者Bri Bri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:57:17