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 命令行工具
每月 59 次下载
4MB
5.5K SLoC
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