9 个版本 (破坏性更新)
0.9.2 | 2024年5月21日 |
---|---|
0.9.1 | 2022年6月15日 |
0.9.0 | 2021年12月5日 |
0.8.0 | 2021年5月23日 |
0.3.0 | 2019年11月24日 |
#174 in 命令行实用程序
每月49 次下载
150KB
3.5K SLoC
ukebox
ukebox
是一个用 Rust 编写的命令行尤克里里和弦工具箱。
目录
特性
- 通过打印 ASCII 艺术和弦图表,显示如何在尤克里里上演奏给定的和弦
- 呈现与给定指法对应的 和弦名称,该指法以 数字和弦记号 表示
- 支持 不同的尤克里里调音(C、D 和 G)
- 可以在 fretboard 上呈现每个和弦的不同 位置
- 允许您通过任何数量的半音进行和弦转换
- 帮助您为给定的和弦序列找到好的 声部进行
安装
ukebox
的每个版本都提供预编译二进制的存档,适用于 Windows、macOS 和 Linux。
或者,可以使用 cargo
安装 ukebox
。
$ cargo install ukebox
使用方法
USAGE:
ukebox [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
SUBCOMMANDS:
chart Chord chart lookup
chords List all supported chord types and symbols
help Prints this message or the help of the given subcommand(s)
name Chord name lookup
voice-lead Voice leading for a sequence of chords
当使用 Rust 运行程序时,将命令 ukebox
替换为 cargo run --release
,例如 cargo run --release -- chart G
。
和弦图表查找
使用子命令 chart
来查找给定和弦名称的图表。默认情况下,显示第一个匹配的和弦指法。使用标志 --all
获取相同和弦的所有可能的指法。您可以使用其他选项进一步过滤结果,例如指定应包含在和弦指法中的最小或最大品位。
USAGE:
ukebox chart [FLAGS] [OPTIONS] <chord>
FLAGS:
-a, --all Print out all voicings of <chord> that fulfill the given conditions
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--max-fret <FRET_ID> Maximal fret up to which to play <chord> [default: 12]
--max-span <FRET_COUNT> Maximal span between the first and the last fret pressed down when playing <chord>
[default: 4]
--min-fret <FRET_ID> Minimal fret (= minimal position) from which to play <chord> [default: 0]
--transpose <SEMITONES> Number of semitones to add (e.g. 1, +1) or to subtract (e.g. -1) [default: 0]
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
ARGS:
<CHORD> Name of the chord to be shown
一些示例
$ ukebox chart G
[G - G major]
A ||---|-o-|---|---|- B
E ||---|---|-o-|---|- G
C ||---|-o-|---|---|- D
G o||---|---|---|---|- G
$ ukebox chart --tuning D G
[G - G major]
B o||---|---|---|---|- B
F# ||-o-|---|---|---|- G
D o||---|---|---|---|- D
A ||---|-o-|---|---|- B
$ ukebox chart --min-fret 3 G
[G - G major]
A -|---|-o-|---|---|- D
E -|---|---|---|-o-|- B
C -|---|---|---|-o-|- G
G -|-o-|---|---|---|- B
4
$ ukebox chart --tuning D --min-fret 3 G
[G - G major]
B -|-o-|---|---|---|- D
F# -|---|---|-o-|---|- B
D -|---|---|-o-|---|- G
A -|---|---|-o-|---|- D
3
$ ukebox chart --transpose 1 C
[C# - C# major]
A ||---|---|---|-o-|- C#
E ||-o-|---|---|---|- F
C ||-o-|---|---|---|- C#
G ||-o-|---|---|---|- G#
$ ukebox chart --transpose -2 C
[Bb - Bb major]
A ||-o-|---|---|---|- Bb
E ||-o-|---|---|---|- F
C ||---|-o-|---|---|- D
G ||---|---|-o-|---|- Bb
$ ukebox chart --all --max-fret 5 C
[C - C major]
A ||---|---|-o-|---|- C
E o||---|---|---|---|- E
C o||---|---|---|---|- C
G o||---|---|---|---|- G
A ||---|---|-o-|---|- C
E o||---|---|---|---|- E
C ||---|---|---|-o-|- E
G o||---|---|---|---|- G
A ||---|---|-o-|---|- C
E ||---|---|-o-|---|- G
C ||---|---|---|-o-|- E
G o||---|---|---|---|- G
A -|-o-|---|---|---|- C
E -|-o-|---|---|---|- G
C -|---|-o-|---|---|- E
G -|---|---|-o-|---|- C
3
和弦名称查找
使用子命令 name
来查找与给定和弦指法相对应的和弦名称。
USAGE:
ukebox name [OPTIONS] <FRET_PATTERN>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
ARGS:
<FRET_PATTERN> A compact chart representing the finger positions of the chord to be looked up
一些示例
$ ukebox name 2220
D - D major
$ ukebox name --tuning D 2220
E - E major
$ ukebox name 0233
Csus2 - C suspended 2nd
Gsus4 - G suspended 4th
如果品位模式包含大于9的品位号,您必须在品位号之间添加空格,并将它们放在引号内。
$ ukebox name "7 7 7 10"
G - G major
声部进行
使用子命令 voice-lead
来获取针对给定和弦序列的一些灵感,以找到良好的 和声进行。为了判断某个和声进行可能比另一个更好,ukebox
使用两个指法之间的“半音距离”(以找到良好的指法转换)以及用于演奏它们的指法的距离(以确保转换也是易于演奏的)。此功能仍处于非常实验阶段,并有望在未来进一步改进。对于其实施,我从 Pete Corey 的以下博客文章 博客 文章 中获得了许多灵感。
USAGE:
ukebox voice-lead [OPTIONS] <CHORD_SEQUENCE>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--max-fret <FRET_ID> Maximal fret up to which to play <chord> [default: 12]
--max-span <FRET_COUNT> Maximal span between the first and the last fret pressed down when playing <chord>
[default: 4]
--min-fret <FRET_ID> Minimal fret (= minimal position) from which to play <chord> [default: 0]
--transpose <SEMITONES> Number of semitones to add (e.g. 1, +1) or to subtract (e.g. -1) [default: 0]
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
ARGS:
<CHORD_SEQUENCE> Chord sequence
一些示例
$ ukebox voice-lead "C F G"
[C - C major]
A ||---|---|-3-|---|- C
E o||---|---|---|---|- E
C o||---|---|---|---|- C
G o||---|---|---|---|- G
[F - F major]
A ||---|---|-3-|---|- C
E ||-1-|---|---|---|- F
C o||---|---|---|---|- C
G ||---|-2-|---|---|- A
[G - G major]
A ||---|-2-|---|---|- B
E ||---|---|-3-|---|- G
C ||---|-1-|---|---|- D
G o||---|---|---|---|- G
$ ukebox voice-lead "C F G" --tuning D
[C - C major]
B ||-1-|---|---|---|- C
F# ||-1-|---|---|---|- G
D ||---|-2-|---|---|- E
A ||---|---|-3-|---|- C
[F - F major]
B ||-1-|---|---|---|- C
F# ||---|---|-4-|---|- A
D ||---|---|-3-|---|- F
A ||---|---|-2-|---|- C
[G - G major]
B o||---|---|---|---|- B
F# ||-1-|---|---|---|- G
D o||---|---|---|---|- D
A ||---|-2-|---|---|- B
支持的和弦类型
运行 ukebox chords
获取当前支持的和弦类型和符号列表。
$ ukebox chords
Supported chord types and symbols
The root note C is used as an example.
C major - C, Cmaj, CM
C major 7th - Cmaj7, CM7
C major 9th - Cmaj9, CM9
C major 11th - Cmaj11, CM11
C major 13th - Cmaj13, CM13
C major 6th - C6, Cmaj6, CM6
C 6th/9th - C6/9, Cmaj6/9, CM6/9
C dominant 7th - C7, Cdom
C dominant 9th - C9
C dominant 11th - C11
C dominant 13th - C13
C dominant 7th flat 9th - C7b9
C dominant 7th sharp 9th - C7#9
C dominant 7th flat 5th - C7b5, C7dim5
C suspended 4th - Csus4, Csus
C suspended 2nd - Csus2
C dominant 7th suspended 4th - C7sus4, C7sus
C dominant 7th suspended 2nd - C7sus2
C minor - Cm, Cmin
C minor 7th - Cm7, Cmin7
C minor/major 7th - CmMaj7, CmM7, CminMaj7
C minor 6th - Cm6, Cmin6
C minor 9th - Cm9, Cmin9
C minor 11th - Cm11, Cmin11
C minor 13th - Cm13, Cmin13
C diminished - Cdim, Co
C diminished 7th - Cdim7, Co7
C half-diminished 7th - Cm7b5, Cø, Cø7
C 5th - C5
C augmented - Caug, C+
C augmented 7th - Caug7, C+7, C7#5
C augmented major 7th - CaugMaj7, C+M7
C added 9th - Cadd9, Cadd2
C added 4th - Cadd4
开发
提交前钩子
为了自动强制执行编码约定,Git钩子可以简化此过程。预提交钩子在每次提交之前运行,检查条件或修改文件(例如,使用 rustfmt 格式化代码)。.githooks 文件夹包含一个预提交脚本,该脚本运行 Rust 检查器 clippy 并使用 rustfmt 格式化代码。您需要安装这些工具并将 Git 配置为使用 .githooks 中的钩子。
$ rustup component add clippy
$ rustup component add rustfmt
$ git config core.hooksPath .githooks
现在,钩子将在您每次提交时运行。如果发现问题,则提交过程将中断并显示消息。手动解决 clippy 警告,使用 git add 添加更改的文件,然后重新运行 git commit,直到没有错误为止。
要忽略特定块的 clippy 检查,使用 #[allow(LINT_NAME)],或在 lib.rs 的顶部全局使用 #![allow(LINT_NAME)]。通过添加 #rustfmt::skip 来防止 rustfmt 格式化一个块。
要绕过提交的预提交钩子,向 git commit 添加 -n 选项。
许可证
许可协议为以下之一
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中的任何贡献,都应如上所述双重许可,不得附加任何其他条款或条件。
依赖项
~4.5MB
~71K SLoC