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 次下载
25KB
377 行
音调
处理音调音级、调性、音程、升降记号和变音的库。音调音级 (Tpc
) 不区分不同八度中的音高,但它区分音符、音程和调性的不同等音记谱。这是基于“五度线”概念实现的。
在多个应用中区分等音记谱是可取的
- 在乐谱中,使用错误的等音记谱会损害可读性
- 当使用不同于十二平均律(12TET)的调性时,在这种情况下,通常被认为是等音的音符实际上应该以不同的音高演奏。
另一种重要类型是 Step
,它表示升G和降G在乐谱的同一行上。一个 Step
与一个 Key
或 Accidental
结合给出一个 Tpc
。
使用 Step
类型也有助于你处理八度。例如,如果你想将高于降A的F音高,你会比较它们的 Step
,看到F的步阶低于降A,因此应该提高一个八度。
使用 Tpc
和 Interval
进行算术运算返回可选值,因为它们可能导致超出库域的变音。不支持三重升/降号或双倍减/增音程。
示例
您可以通过指定和弦为 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