【问题标题】:Sound Frequency to Octave and Key Number声音频率到八度和键号
【发布时间】:2020-03-25 19:19:49
【问题描述】:

给定一个波的频率,确定从 0 到 7 的八度音阶和调号,其中 0 是 C,6 是 B,C# 是 7,A# 是 11。

您可以使用一系列 if 语句来解决它,但必须有更好的方法来解决它。我的项目使用的语言是 Clojure,但我猜任何解决方案都可以轻松移植到任何语言。

【问题讨论】:

  • cond 不适用于这种情况?
  • 是的,但这与一系列 if 相同。依稀记得曾经见过一个使用 Math/log 的解决方案,但不知道在哪里。

标签: math clojure signal-processing


【解决方案1】:

以下假设您使用的是经过调整的chromatic scale。音符具有对数频率刻度。每增加一个八度音程,频率就会乘以 2。在一个八度内,音符 C、C#、D、D#、E、F、F#、G、G#、A、A#、B 有十二个等比例的音​​阶,编号从零到十一个。

从频率中获取八度数和音符数:

  • 以 2 为基数记录频率。
  • 减去中间 C 频率的对数。
    • 整数部分为八度数;
    • (正)余数乘以十二, 是注释编号。这将不准确。

中间C以下的音符有一个负八度数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2023-03-14
    • 2011-07-11
    • 2019-06-21
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多