#音乐理论 #和弦 #理论 #音乐 #爵士 #cli

nightly bin+lib kord

一个轻松探索音乐理论原理的工具

18 个不稳定版本 (6 个破坏性更新)

0.7.1 2023 年 12 月 21 日
0.6.1 2023 年 6 月 16 日
0.5.16 2023 年 4 月 7 日
0.5.3 2023 年 3 月 24 日
0.1.4 2022 年 12 月 22 日

#1153 in 命令行工具

Download history 50/week @ 2024-03-30 19/week @ 2024-04-06 1/week @ 2024-05-18 1/week @ 2024-05-25

每月 59 次下载

MIT 许可证

4MB
5.5K SLoC

Build and Test codecov Version Crates.io GitHub all releases npm Documentation Rust License:MIT

kord

Rust / JS 的音乐理论二进制文件和库(通过 WASM)(功能游乐场)。

二进制使用

安装

Windows

$ iwr https://github.com/twitchax/kord/releases/latest/download/kord_x86_64-pc-windows-gnu.zip
$ Expand-Archive kord_x86_64-pc-windows-gnu.zip -DestinationPath C:\Users\%USERNAME%\AppData\Local\Programs\kord

Mac OS (Apple Silicon)

$ curl -LO https://github.com/twitchax/kord/releases/latest/download/kord_aarch64-apple-darwin.zip
$ unzip kord_aarch64-apple-darwin.zip -d /usr/local/bin
$ chmod a+x /usr/local/bin/kord

Linux

$ curl -LO https://github.com/twitchax/kord/releases/latest/download/kord_x86_64-unknown-linux-gnu.zip
$ unzip kord_x86_64-unknown-linux-gnu.zip -d /usr/local/bin
$ chmod a+x /usr/local/bin/kord

Cargo

$ cargo install kord

NPM

$ npm install --save kordweb

Wasmer

这具有减少的功能集(没有音频输入/输出),但适用于一些核心用例。

$ wasmer install twitchax/kord

或者,您可以使用 wasmer run

$ wasmer run twitchax/kord -- describe Am7

帮助文档

$ kord -h

A tool to easily explore music theory principles.

Usage: kord.exe [COMMAND]

Commands:
  describe  Describes a chord
  play      Describes and plays a chord
  loop      Loops on a set of chord changes, while simultaneously outputting the descriptions
  guess     Attempt to guess the chord from a set of notes (ordered by simplicity)
  analyze   Set of commands to analyze audio data
  ml        Set of commands to train and infer with ML
  help      Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help information
  -V, --version  Print version information

描述和弦

$ kord describe Cmaj7

Cmaj7
   major 7, ionian, first mode of major scale
   C, D, E, F, G, A, B
   C, E, G, B

演奏和弦

$ kord play Bb7#9#11

B♭7(♯9)(♯11)
   dominant sharp 9, altered, altered dominant, super locrian, diminished whole tone, seventh mode of a melodic minor scale, melodic minor up a half step
   B♭, C♭, D♭, E𝄫, F♭, G♭, A♭
   B♭, D, F, A♭, C♯, E

循环和弦变化

$ kord loop -b 120 "Em7b5@3^2" "A7b13@3!" "D-maj7@3^2" "G7@3" "Cmaj7@3^2"

猜测和弦

$ kord guess C F# D# A
Cdim
   fully diminished (whole first), diminished seventh, whole/half/whole diminished
   C, D, E♭, F, G♭, A♭, B𝄫, B
   C, E♭, G♭, B𝄫
Cm(♭5)(add6)
   minor
   C, D, E♭, F, G, A♭, B♭
   C, E♭, G♭, A
$ kord guess C G Bb F#5 F
C7(♯11)(sus4)
   dominant sharp 11, lydian dominant, lyxian, major with sharp four and flat seven
   C, D, E, F♯, G, A, B♭
   C, F, G, B♭, F♯
Cm7(♯11)(sus4)
   minor 7, dorian, second mode of major scale, major with flat third and flat seven
   C, D, E♭, F, G, A, B♭
   C, F, G, B♭, F♯
$ kord guess E3 C4 Eb4 F#4 A#4 D5 D4
Cm9(♭5)(add2)/E
   half diminished, locrian, minor seven flat five, seventh mode of major scale, major scale starting one half step up
   C, D, E♭, F, G♭, A♭, B♭
   E, C, D, E♭, G♭, B♭, D

从音频中猜测音符/和弦

仅使用确定性算法

$ kord analyze mic

Notes: C3 E3 G3
C@3
   major
   C, D, E, F, G, A, B
   C, E, G

使用机器学习算法

$ kord ml infer mic

Notes: C3 E3 G3
C@3
   major
   C, D, E, F, G, A, B
   C, E, G

库使用

将其添加到您的 Cargo.toml

[dependencies]
kord = "*" #choose a version

示例

use klib::known_chord::KnownChord;
use klib::modifier::Degree;
use klib::note::*;
use klib::chord::*;

// Check to see what _kind_ of chord this is.
assert_eq!(Chord::new(C).augmented().seven().known_chord(), KnownChord::AugmentedDominant(Degree::Seven));
use crate::klib::base::Parsable;
use klib::note::*;
use klib::chord::*;

// Parse a chord from a string, and inspect the scale.
assert_eq!(Chord::parse("Cm7b5").unwrap().scale(), vec![C, D, EFlat, F, GFlat, AFlat, BFlat]);
use klib::note::*;
use klib::chord::*;

// From a note, create a chord, and look at the chord tones.
assert_eq!(C.into_chord().augmented().major7().chord(), vec![C, E, GSharp, B]);

JS 使用

npm 包可在 此处 获取。

首先,像任何其他 ES 模块一样加载模块。

import init, { KordNote, KordChord } from 'kordweb/klib.js';

// Run `init` once.
await init();

然后,您可以像在 Rust 中一样使用库。

// Create a note.
const note = KordNote.parse('C4');

note.name(); // C4
note.octave(); // 4

// Create a chord.
const chord = KordChord.parse('C7#9');

chord.name(); // C7(♯9)
chord.chordString(); // C4 E4 G4 Bb5 D#5

// Easy chaining.
KordChord.parse('C7b9').withOctave(2).chord().map(n => n.name()); // [ 'C2', 'D♭2', 'E2', 'G2', 'B♭2' ]

// Build chords.
KordChord.parse('C').minor().seven().chord().map(n => n.name()); // [ 'C4', 'Eb4', 'G4', 'Bb4' ]

功能标志

库和二进制文件都支持各种功能标志。其中最重要的是

  • 默认= ["cli", "analyze", "audio"]
  • cli:启用 CLI 功能,如果仅编译库,则可以删除。
  • analyze = ["analyze_mic", "analyze_file"]:启用 analyze 子命令,允许分析音频数据(以及底层库功能)。
    • analyze_mic:启用 analyze mic 子命令,允许分析麦克风音频(以及底层库功能)。
    • analyze_file:启用 analyze file 子命令,允许分析文件音频(以及底层库功能)。
      • analyze_file_mp3:启用分析MP3文件的功能。
      • analyze_file_aac:启用分析AAC文件的功能。
      • analyze_file_alac:启用分析ALAC文件的功能。
  • ml = ["ml_train", "ml_infer"]:启用ml子命令,允许使用ML(以及底层库功能)进行训练和推理。
    • ml_train:启用ml train子命令,允许训练ML模型(以及底层库功能)。
    • ml_infer:启用ml infer子命令,允许使用ML模型进行推理(以及底层库功能)。
      • 注意:添加analyze_mic功能标志将启用ml infer mic子命令,允许使用麦克风从ML模型进行推理。

      • 注意:添加analyze_file功能标志将启用ml infer file子命令,允许使用文件从ML模型进行推理。

    • ml_gpu:启用使用GPU进行ML训练的功能。
  • wasm:启用编译到wasm的功能。
  • plot:启用绘图数据的功能。

测试

cargo test

许可

MIT

依赖项

~2–49MB
~748K SLoC