#music-theory #midi #chord #scale #notes #score #rendering

无 std bin+lib staff

包含 midi、音符、和弦、音阶等音乐理论的库

13 个版本 (重大更新)

0.11.0 2023 年 9 月 18 日
0.9.0 2022 年 12 月 25 日
0.8.0 2022 年 12 月 20 日
0.5.0 2022 年 11 月 22 日

#238音频

每月 50 次下载

MIT 许可证

87KB
2.5K SLoC

Staff

crate documentation

网站

包含 midi、音符、和弦、音阶等音乐理论和乐谱渲染的库。

用法

use staff::{midi, Chord, Pitch};

let chord = Chord::from_midi(
    midi!(C, 4),
    [midi!(E, 3), midi!(G, 3), midi!(C, 4)]
);

assert_eq!(chord.to_string(), "C/E");

let pitches = [Pitch::E, Pitch::G, Pitch::C];
assert!(chord.into_iter().eq(pitches));

功能

  • render: 启用 render 模块
    • svg: 启用渲染到 SVG
  • synth: 启用 synth 模块
  • serde: 实现许多 crate 类型的 Deserialize 和 Serialize

lib.rs:

包含 midi、音符、和弦、音阶等音乐理论的库

功能标志

Staff 使用一系列 功能标志 以减少编译代码的量。可以选择只启用某些功能。默认情况下,staff 不启用任何功能,但允许根据特定用例启用子集。以下是可用的功能标志列表。您还可以注意,在每个函数、结构和特质旁边列出了所需的一个或多个功能标志。如果您是 staff 的初学者,建议使用 full 功能标志,这将启用所有公共 API。但是请注意,这将引入许多额外的依赖项,这些依赖项您可能不需要。

  • full: 启用以下列出的所有功能。
  • std: 启用 std,否则此 crate 将使用 #![no_std]
  • parse 启用 staff::parse 模块。
  • fretboard 启用 staff::fretboard 模块。
  • render 启用 staff::render 模块。

示例

创建一个C大调(第一转位)和弦,并遍历其音符。

use staff::{midi, Chord, Pitch};

// C/E
let notes = [midi!(E, 3), midi!(G, 3), midi!(C, 4)];
let chord = Chord::from_midi(midi!(C, 4), notes).unwrap();

assert_eq!(chord.to_string(), "C/E");

assert!(chord.into_iter().eq(notes));

创建一个C大调音阶,并遍历其音符。

use staff::{midi, Note, Scale};

// C major
let scale = Scale::major(midi!(C, 4));

assert!(scale.eq([
    midi!(C, 4),
    midi!(D, 4),
    midi!(E, 4),
    midi!(F, 4),
    midi!(G, 4),
    midi!(A, 4),
    midi!(B, 4),
]));

依赖项

~1.3–3.5MB
~54K SLoC