5 个版本

0.1.1 2020 年 5 月 19 日
0.1.0 2020 年 5 月 18 日
0.0.3 2020 年 5 月 16 日
0.0.2 2020 年 5 月 15 日
0.0.1 2020 年 5 月 15 日

#195多媒体

每月 25 次下载

MIT/Apache

25KB
377

音调

crate documentation build

处理音调音级、调性、音程、升降记号和变音的库。音调音级 (Tpc) 不区分不同八度中的音高,但它区分音符、音程和调性的不同等音记谱。这是基于“五度线”概念实现的。

在多个应用中区分等音记谱是可取的

  • 在乐谱中,使用错误的等音记谱会损害可读性
  • 当使用不同于十二平均律(12TET)的调性时,在这种情况下,通常被认为是等音的音符实际上应该以不同的音高演奏。

另一种重要类型是 Step,它表示升G和降G在乐谱的同一行上。一个 Step 与一个 KeyAccidental 结合给出一个 Tpc

使用 Step 类型也有助于你处理八度。例如,如果你想将高于降A的F音高,你会比较它们的 Step,看到F的步阶低于降A,因此应该提高一个八度。

使用 TpcInterval 进行算术运算返回可选值,因为它们可能导致超出库域的变音。不支持三重升/降号或双倍减/增音程。

示例

您可以通过指定和弦为 Interval 的集合来找到和弦中音符的音调音级。

use tonality::{Tpc, Interval};

type Chord = Vec<Interval>;

let dom7: Chord = vec![Interval::Unison, Interval::Maj3, Interval::P5, Interval::Min7];
let root = Tpc::Fs;
let chord_tones: Vec<Tpc> = dom7
    .iter()
    // `Tpc` + `Interval` returns `Option<Tpc>`
    .filter_map(|&interval| root + interval)
    .collect();

let expected = vec![Tpc::Fs, Tpc::As, Tpc::Cs, Tpc::E];
assert_eq!(expected, chord_tones);

灵感

类型和运算,特别是 Tpc 类型,受 Musecore 内部库的影响。

pitch_calc 允许您在包括频率域在内的多种音高表示法之间进行转换。

rust-music-theory 支持过程式地使用音乐理论概念,如音符、和弦、音阶、音程等。

该包可能在将来支持与上述包中类型的转换。

依赖项

~1.5MB
~38K SLoC