#scale #tuning #midi #synthesizer #microtonal #command-line-tool #midi-file

bin+lib tune-cli

探索音乐调音并创建微音阶合成器调音文件。

28 个版本 (有破坏性)

0.28.0 2024 年 7 月 11 日
0.27.0 2023 年 12 月 4 日
0.26.0 2023 年 5 月 11 日
0.25.1 2023 年 2 月 7 日
0.9.0 2020 年 6 月 21 日

672音频 中排名

Download history 87/week @ 2024-04-13 100/week @ 2024-07-06 29/week @ 2024-07-13 2/week @ 2024-07-20

每月 131 次下载
microwave 中使用

MIT 许可证

485KB
8K SLoC

探索音乐调音并创建微音阶合成器调音文件。

概述

tune-cli 是微音阶 tune 库的命令行工具。

资源

下载 / 安装

选项 A:尝试浏览器应用以获得第一印象

选项 B:下载支持目标架构的预编译版本的 tune-cli

选项 C:使用 Rust 和 Cargo 为您的特定目标架构从头开始构建全新的二进制文件

cargo install -f tune-cli

用法

简介

为什么西方音乐使用 7 个白键和 5 个黑键?

这两个数字似乎随意,但实际上,通过应用第一原理,可以证明它们是一个合理的选择。要煮西方调音汤,我们只需要几个成分

  • 数字 2 作为周期性间隔:具有频率比为 2 的音高被人类感知为等效。因此,只命名音谱 [1f, 2f] 内的键是有意义的。
  • 数字3作为生成器:任何因子都可以用作生成器。然而,在大多数乐器的频率谱中,最强烈的非平凡峰值位于基频以上的3倍因子处。通过将该因子包含在调音中,我们可以确保和弦中多个键的频谱峰值匹配得很好——这是一个可以作为和谐度指标的条件。
  • 两个步长:重复应用生成器(并按周期因子减少)我们得到一个具有两个或三个步长比的音阶。为了简化问题,我们只接受具有2个步长比的音阶,即对称时刻(MOS)属性。

tune-cli可以根据上述要求找到有效的步数和大小。

tune mos find --per 2 3

这将打印所有xLyx大步,y小步)配置,直到某个截止限制。

(+) num_notes = 2, 1L1s, L = +702c, s = +498c, L/s = 1.41 (*)
(-) num_notes = 3, 2L1s, L = +498c, s = +204c, L/s = 2.44
(-) num_notes = 5, 2L3s, L = +294c, s = +204c, L/s = 1.44
(+) num_notes = 7, 5L2s, L = +204c, s = +90c, L/s = 2.26
(+) num_notes = 12, 5L7s, L = +114c, s = +90c, L/s = 1.26 (*)
(-) num_notes = 17, 12L5s, L = +90c, s = +23c, L/s = 3.85
(-) num_notes = 29, 12L17s, L = +67c, s = +23c, L/s = 2.85
(-) num_notes = 41, 12L29s, L = +43c, s = +23c, L/s = 1.85
(+) num_notes = 53, 41L12s, L = +23c, s = +20c, L/s = 1.18 (*)
(-) num_notes = 94, 53L41s, L = +20c, s = +4c, L/s = 5.49
(-) num_notes = 147, 53L94s, L = +16c, s = +4c, L/s = 4.49
(-) num_notes = 200, 53L147s, L = +13c, s = +4c, L/s = 3.49
(-) num_notes = 253, 53L200s, L = +9c, s = +4c, L/s = 2.49
(-) num_notes = 306, 53L253s, L = +5c, s = +4c, L/s = 1.49
(+) num_notes = 359, 306L53s, L = +4c, s = +2c, L/s = 2.04
(+) num_notes = 665, 306L359s, L = +2c, s = +2c, L/s = 1.04 (*)
(+/-) = bright / dark generator
(*) = best equal-step approximation so far

我们可以看到,对某些合理的音阶步数有偏好。

  • 2, 3:并不是真正的音阶
  • 5:五声音阶,在音乐中无处不在,但缺乏风味/不和谐
  • 7:大小调音阶,辛辣程度足够,但缺乏调性变化
  • 12:可以被认为是5L2s的模式扩展
  • 17, 29, 41等:更多的模式扩展

在西方调音中,12个音的5L7s配置被选为表达性和复杂度之间的最佳平衡点。它包含大小调7个音(5L2s)的白色键配置,但留下了足够的房间进行5个黑键调性变化。为了达到无限的调性圈,5L7s已经等分(L = s)。结果是所谓的12等分八度(12-EDO)或简称为现代西方调音

探索异国调音

一个简单的异国调音是7-EDO,因为它的调式MOS(5L2s)是12-EDO MOS(5L7s)的子集。它可以被视为一个没有模式的等分调式,即大调、小调、多利亚等听起来都一样。

tune-cli可以帮助您将钢琴调音到7-EDO。只需使用以下命令

tune dump ref-note 62 --lo-key 61 --up-key 71 steps 1:7:2

这将指示tune打印以D4(MIDI编号62)为起始点的7-EDO音阶的频率和近似音符。输出

  ----------Source Scale---------------Pitch-------------Target Scale--------
   61 | IDX   -1 | 20/11   -6¢  -1o ‖     265.979 Hz ‖   60 |      C  4 |  +28.571¢
>  62 | IDX    0 |  1/1    +0¢  +0o ‖     293.665 Hz ‖   62 |      D  4 |   +0.000¢
   63 | IDX    1 | 11/10   +6¢  +0o ‖     324.232 Hz ‖   64 |      E  4 |  -28.571¢
   64 | IDX    2 | 11/9    -5¢  +0o ‖     357.981 Hz ‖   65 |      F  4 |  +42.857¢
   65 | IDX    3 |  4/3   +16¢  +0o ‖     395.243 Hz ‖   67 |      G  4 |  +14.286¢
   66 | IDX    4 |  3/2   -16¢  +0o ‖     436.384 Hz ‖   69 |      A  4 |  -14.286¢
   67 | IDX    5 | 18/11   +5¢  +0o ‖     481.807 Hz ‖   71 |      B  4 |  -42.857¢
   68 | IDX    6 | 20/11   -6¢  +0o ‖     531.958 Hz ‖   72 |      C  5 |  +28.571¢
   69 | IDX    7 |  2/1    -0¢  +0o ‖     587.330 Hz ‖   74 |      D  5 |   -0.000¢
   70 | IDX    8 | 11/10   +6¢  +1o ‖     648.464 Hz ‖   76 |      E  5 |  -28.571¢

表格告诉我们,7-EDO音阶的第一步(IDX 0)的频率为293.655 Hz,与D4完全匹配。这是显而易见的,因为我们选择了D4作为7-EDO音阶的起点。IDX 1,音阶的第二步,报告接近E4,但有-28.571¢的偏移。

现在,您可以调整钢琴上每个D音符的音高为-28.571¢。在基于八度调音支持的电子钢琴上,这是一项非常简单的任务。也可以使用调音设备重新调音真正的钢琴。

根据表格和7-EDO音阶重新调音每个音符,这样7-EDO音阶就可以在白键上演奏了!

MIDI调音标准

如果您不想手动调整电子钢琴,您可以指示tune-cli向您的合成器发送MIDI调音标准(MTS)消息。首先定位您的目标MIDI设备

tune devices

这将列出所有可用的MIDI设备

Readable MIDI devices:
- Foo Synthesizer:Output 128:0
- Bar Synthesizer:Output 128:0
Writable MIDI devices:
- Foo Synthesizer:Input 128:0
- Bar Synthesizer:Input 128:0

现在,您可以将7-EDO的音阶/八度调音消息发送到Foo合成器

tune mts --send-to foo octave-1 ref-note 62 steps 1:7:2

此外,该命令会将调音消息打印到stdout

== SysEx start (channel 0) ==
0xf0
0x7e
0x7f
0x08
..
0x32
0x40
0x15
0xf7
Sending MIDI data to Foo Synthesizer:Input 128:0
== SysEx end ==

全键盘调音

音阶/八度调音消息非常有限:它只能稍微调音八度内的12个音符,这意味着不可能将超过12个音符挤入八度,或者模拟基于非八度调音的调音,如Bohlen-Pierce或扩展的EDO。

为了克服这一限制,合成器可以响应 单音符调音更改 消息。它提供了对每个单独MIDI音符音高的完全控制,使得任何调音场景都变得可行。不幸的是,许多合成器并不响应这个调音消息。

要向合成器发送单音符调音更改消息,请使用以下方法

tune mts --send-to foo full ref-note 62 steps 1:7:2

输出

== SysEx start ==
0xf0
0x7f
0x7f
0x08
..
0x7f
0x12
0x25
0xf7
Sending MIDI data to Foo Synthesizer:Input 128:0
Number of retuned notes: 75
Number of out-of-range notes: 13
== SysEx end ==

据报道,一些音符超出范围。这是因为7-EDO的每步频率增加比12-EDO更强,以至于一些(听不见的)频率变得无法映射。

键盘映射

与基于八度的映射不同,默认情况下,全键盘映射将相邻键映射到调音的相邻度数。然而,对于7-EDO,在映射中跳过/忽略黑键会更加方便。

要指定仅白键的键盘映射,请使用以下语法

tune mts --send-to 1 full ref-note 62 --key-map 0,x,1,2,x,3,x,4,x,5,6,x --octave 7 steps 1:7:2

--key-map 参数指定键D映射到度数0,键D#未映射,E映射到度数1,F映射到度数2,以此类推。参数 --octave 告诉我们第12个键盘度数(D加一个八度)应该映射到音阶度数7(7-EDO中的一个八度)。

实时调音

你很可能对合成器的调音功能不满意的风险很高,因为

  • 你的合成器支持单音符调音更改消息,但它根据MIDI音符编号而不是所需的音高(慢动作或延时效果——虽然令人悲伤,但却是事实!)来选择声音样本
  • 你的合成器支持音阶/八度调音,但你需要一个八度内超过12个音符,或者你的调音不是基于八度的
  • 你的合成器根本不支持MTS

实时调音 功能是 tune-cli 发挥作用的领域。《code>tune-cli 可以应用一些解决方案,使带有音高弯轮的非常基本的键盘能够演奏Bohlen-Pierce音阶。

当然,这也有一定的代价。你的虚拟乐器将消耗多个MIDI通道而不是一个,或者你必须接受同时演奏的音符可能会发生冲突。

要了解实时调音的作用,请查看 live 子命令的CLI帮助

tune live --help

提前实时调音

以下命令启用31-EDO的 提前实时调音,使用音阶/八度(1字节)调音消息

tune live --midi-in foo --midi-out bar aot octave-1 ref-note 62 steps 1:31:2

示例输出

Tuning requires 3 MIDI channels
Sending MIDI data to Bar Synthesizer:Input 128:0
in-channels {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} -> out-channels {0, 1, 2, 3, 4, 5, 6, 7, 8}
[MIDI-in] Waiting for MIDI device `foo` to come online...
[MIDI-in] Connected to Foo Synthesizer:Input 128:0```

"提前"这个术语反映了这样一个事实:在第一阶段,将进行调音的几个通道将进行调音,所需的MIDI通道数量是固定的,并且取决于选定的调音和调音方法(使用 tune live aot --help 获取更多信息)。默认情况下,所有从0到8的通道都被认为是可用的。然而,给定的调音只需要其中的3个。请注意,tune-cli 使用基于0的通道和右排他范围——这是一种有效地避免编程错误的约定。

第二阶段是现场表演阶段。不会发送进一步的调音消息。相反,每个传入的MIDI消息将转换成另一个消息或一系列输出MIDI消息,这些消息将在应用了适当调音的通道上。

提前实时调音总是分配足够的通道,以便可以同时演奏任何音符组合。

即时实时调音

如果你想要分配比 aot 更少的通道(比如说两个而不是三个),你可以应用 即时实时调音

tune live --midi-in foo --midi-out bar --out-chans 2 jit octave-1 ref-note 62 steps 1:31:2

示例输出

Sending MIDI data to Bar Synthesizer:Input 128:0
in-channels {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} -> out-channels {0, 1}
[MIDI-in] Waiting for MIDI device `foo` to come online...
[MIDI-in] Connected to Foo Synthesizer:Input 128:0```

从表面上看,jit 看起来非常类似于 aot。然而,在其实施方面有一个很大的区别:虽然 aot 使用固定映射和固定数量的通道,但 jit 使用动态映射,该映射会在每次触发新音符时更新。

在给定示例中,我们决定使用两个 jit 通道,而不是三个 aot 通道。这意味着一些三个音符的组合不能同时以正确的音准演奏。虽然这听起来像是一个硬性限制,但在我们的情况下并不是。原因是,为了发生三个音符的冲突,所有的音符都必须映射到同一个音符字母。对于音符 61、62 和 63 就是这样,它们都是 31-EDO 步距。通常,这种限制只有在按下非常不谐和的音符簇时才会显现。

全通道实时调音

如果你的合成器完全不支持复杂的调音消息,那么你的合成器很可能会理解以下消息类型之一

  • 通道精细调音消息
  • 音变消息

上述消息会影响通道中的所有音符。这意味着,当你的调音包含 m 个与 12-EDO 相差的音符时,相应的 aot 实时调音命令将需要 m 个通道。16-EDO 有 4 个与 12-EDO 不同的偏差,因此 aot 命令工作得相当好

tune live --midi-in foo --midi-out bar aot fine-tuning ref-note 62 steps 1:16:2
tune live --midi-in foo --midi-out bar aot pitch-bend ref-note 62 steps 1:16:2

示例输出

Tuning requires 4 MIDI channels
Sending MIDI data to Bar Synthesizer:Input 128:0
in-channels {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15} -> out-channels {0, 1, 2, 3, 4, 5, 6, 7, 8}
[MIDI-in] Waiting for MIDI device `foo` to come online...
[MIDI-in] Connected to Foo Synthesizer:Input 128:0```

通常,aot 通道的数量可以非常大,例如在 17-EDO 的情况下。在这种情况下,请使用 jit

tune live --midi-in foo --midi-out bar --out-chans 8 jit fine-tuning ref-note 62 steps 1:17:2
tune live --midi-in foo --midi-out bar --out-chans 8 jit pitch-bend ref-note 62 steps 1:17:2

在整体通道调音场景中,--out-chans 可以直接与复音程度相关联。

我应该使用哪种调音方法?

您完全可以根据通道消耗和调音冲突预防之间的平衡来设置。一些经验法则是

  • 您的合成器的更高级调音功能 ⇒ 更少的通道/冲突
  • 更简单的调音(基于八度,与 12-EDO 共享一些音程) ⇒ 更少的通道/冲突
  • 要映射的键更少 ⇒ 更少的通道/冲突
  • 更多通道 ⇒ 更少的冲突
  • 更少的冲突 ⇒ 更好的复音

提示

  • 优先选择 aot/jit full(-rt) 而不是 aot/jit octave-n(-rt)
  • 优先选择 aot/jit octave-n(-rt) 而不是 aot/jit fine-tuning
  • 优先选择 aot/jit fine-tuning 而不是 aot/jit pitch-bend
  • aot full(-rt)/octave-n(-rt) 分配了超过 3 个通道时:考虑使用 jit--out-chans=3 以节省通道。
  • 但在此之前:检查是否排除键(ref-note --lo-key/--up-key/--key-map / YAML scale)是一个选项。
  • 只有当您选择的通道比 aot 使用更少时,您才从 jit 中受益。
  • aot fine-tuning/pitch-bend 对 gcd( n , 12) 较大的 n-EDO 非常有效。
  • aot fine-tuning/pitch-bend 可用于 ED1900cents(准EDT),例如 steps 1:13:1900c
  • jit 总是以某种方式工作。使用 --out-chans--clash 参数配置您的多音配置选项。

Lumatone / 多通道输入

一些键盘,如Lumatone,包含超过128个键,这超出了单个MIDI通道的支持范围。为了克服这一限制,tune-cli 可以监听多个通道,每个通道都将偏移量添加到原始MIDI键号。通过 key = midi_note + midi_channel * offset 获取结果键。

例如,执行以下命令以使用其默认的31-EDO预设将Lumatone连接到FLUID Synth。

tune live --midi-in lumatone --luma-offs 31 --midi-out fluid aot full ref-note 62 --root 57 --lo-key 0 --up-key 155 steps 1:31:2

其中 --luma-offs 指定每个通道的偏移量,而 --lo-key / --up-key 则覆盖默认的88键钢琴键盘范围。

Scala 文件格式

另一种调音方法,主要在基于软件的合成器上使用,是将scl和kbm文件上传到您的合成器。

创建 scl 文件 / 音阶表达式

Scala音阶文件格式 以相对音高定义音阶。它不透露有关音阶根音高的任何信息。

  • 纯律

    tune scl steps --help      # Print help for the `steps` subcommand
    tune scl steps 1:12:2      # 12-EDO
    tune scl steps 100c        # 12-EDO
    tune scl steps 1:36:2      # Sixth-tone
    tune scl steps '(100/3)c'  # Sixth-tone
    tune scl steps 1:13:3      # Bohlen-Pierce
    
  • 均律

    tune scl rank2 --help      # Print help for the `rank2` subcommand
    tune scl rank2 3/2 6       # Pythagorean (lydian)
    tune scl rank2 1.5 6 6     # Pythagorean (12-note)
    tune scl rank2 1:4:5 5 1   # quarter-comma meantone (major)
    tune scl rank2 18:31:2 3 3 # 31-EDO meantone (dorian)
    
  • 谐波系列

    tune scl harm --help        # Print help for the `harm` subcommand
    tune scl harm 8             # 8:9:10:11:12:13:14:15:16 scale
    tune scl harm -u 8          # 16/(16:15:14:13:12:11:10:9:8) scale
    tune scl harm 27 --neji 12  # 27:29:30:32:34:36:38:40:43:45:48:51:54 scale
    
  • 导入音阶

    tune scl scl-file --help       # Print help for the `scl-file` subcommand
    tune scl scl-file my_scale.scl # Import my_scale.scl
    
  • 命名音阶

    tune scl --name "Just intonation" steps 9/8 5/4 4/3 3/2 5/3 15/8 2
    
  • 将音阶写入文件

    tune --of edo-22.scl scl steps 1:22:2
    

步骤语法

按优先级排序

  1. <num>:<denom>:<int> 等于 int^(num/denom)
  2. <num>/<denom> 等于 num/denom
  3. <cents>c 等于 2^(cents/1200)
  4. (<expr>) 等于 expr

创建 kbm 文件 / 键盘映射表达式

键盘映射 指定微音阶的根音和参考音高。此外,该格式定义了(物理)键和给定键使用的音阶级别的映射。如果没有提供此类映射,则默认使用线性映射。

  • 打印 kbm 子命令的帮助信息

    tune kbm ref-note --help
    
  • 以C4的常规频率开始音阶

    tune kbm ref-note 60
    
  • 以C4,比常规高20分贝开始音阶

    tune kbm ref-note 60+20c
    
  • 以A4的450Hz开始音阶

    tune kbm ref-note 69@450Hz
    
  • 以A4以下9步开始音阶,A4应该听起来像450Hz

    tune kbm ref-note 69@450Hz --root 60
    
  • 以C4以下两步开始音阶,使用D4作为参考音,仅使用白键

    tune kbm ref-note 62 --root 60 --key-map 0,x,1,2,x,3,x,4,x,5,6,x --octave 7
    
  • 将键盘映射写入文件

    tune --of root-at-d4.kbm kbm ref-note 62
    

调音分析

近似比例

dump 命令提供了有关音阶质量的信息。让我们看一下19-EDO音阶

dump ref-note 62 --lo-key 61 --up-key 71 steps 1:19:2

输出结果显示,一些有理数区间被很好地近似。特别是最近的纯五度(6/5),其近似值小于1¢,因此显示为0¢。

  ----------Source Scale---------------Pitch-------------Target Scale--------
   61 | IDX   -1 |  2/1   -63¢  -1o ‖     283.145 Hz ‖   61 |  C#/Db  4 |  +36.842¢
>  62 | IDX    0 |  1/1    +0¢  +0o ‖     293.665 Hz ‖   62 |      D  4 |   +0.000¢
   63 | IDX    1 |  1/1   +63¢  +0o ‖     304.576 Hz ‖   63 |  D#/Eb  4 |  -36.842¢
   64 | IDX    2 | 12/11  -24¢  +0o ‖     315.892 Hz ‖   63 |  D#/Eb  4 |  +26.316¢
   65 | IDX    3 | 10/9    +7¢  +0o ‖     327.629 Hz ‖   64 |      E  4 |  -10.526¢
   66 | IDX    4 |  7/6   -14¢  +0o ‖     339.803 Hz ‖   65 |      F  4 |  -47.368¢
   67 | IDX    5 |  6/5    +0¢  +0o ‖     352.428 Hz ‖   65 |      F  4 |  +15.789¢
   68 | IDX    6 |  5/4    -7¢  +0o ‖     365.522 Hz ‖   66 |  F#/Gb  4 |  -21.053¢
   69 | IDX    7 |  9/7    +7¢  +0o ‖     379.103 Hz ‖   66 |  F#/Gb  4 |  +42.105¢
   70 | IDX    8 |  4/3    +7¢  +0o ‖     393.189 Hz ‖   67 |      G  4 |   +5.263¢

比较音阶

想象一下,你想知道四分之一音均律在31-EDO中表现如何。你所要做的就是创建四分之一音均律音阶(tune scale)并将其与31-EDO音阶进行tune diff

在四分之一音均律中,五度被调音,使得其中四个与频率比5相匹配。这使得音阶生成器等于5^(1/4)或1:4:5tune表达式表示法中。为了获得一个完整的音阶,例如伊奥尼亚/大调,你需要向上走5个生成器/五度,向下走一个,这对应于音阶表达式rank2 1:4:5 5 1

31-EDO音阶的音阶表达式是steps 1:31:2,因此完整的音阶比较命令变为

tune scale ref-note 62 --lo-key 61 --up-key 71 rank2 1:4:5 5 1 | tune diff stdin ref-note 62 steps 1:31:2

这将打印

  ----------Source Scale---------------Pitch-------------Target Scale--------
   61 | IDX   -1 | 11/6   +34¢  -1o ‖     274.457 Hz ‖   59 | IDX    -3 |   -0.979¢
>  62 | IDX    0 |  1/1    +0¢  +0o ‖     293.665 Hz ‖   62 | IDX     0 |   +0.000¢
   63 | IDX    1 |  9/8   -11¢  +0o ‖     328.327 Hz ‖   67 | IDX     5 |   -0.392¢
   64 | IDX    2 |  5/4    +0¢  +0o ‖     367.081 Hz ‖   72 | IDX    10 |   -0.783¢
   65 | IDX    3 |  4/3    +5¢  +0o ‖     392.771 Hz ‖   75 | IDX    13 |   +0.196¢
   66 | IDX    4 |  3/2    -5¢  +0o ‖     439.131 Hz ‖   80 | IDX    18 |   -0.196¢
   67 | IDX    5 |  5/3    +5¢  +0o ‖     490.964 Hz ‖   85 | IDX    23 |   -0.587¢
   68 | IDX    6 | 11/6   +34¢  +0o ‖     548.914 Hz ‖   90 | IDX    28 |   -0.979¢
   69 | IDX    7 |  1/1    +0¢  +1o ‖     587.330 Hz ‖   93 | IDX    31 |   +0.000¢
   70 | IDX    8 |  9/8   -11¢  +1o ‖     656.654 Hz ‖   98 | IDX    36 |   -0.392¢

你可以看到,31-EDO是一个非常好的四分之一音均律近似,最大偏差为-0.979¢。你也可以看到,相应31-EDO音阶的步长大小为5、5、3、5、5、5和3。

等程调音分析

tune est命令打印有关任何等程调音的基本信息。

tune est 1:19:2的示例输出

==== Properties of 19-EDO ====

- step size: +63.2c
- fret constant: 27.914

---- Val (13-limit) ----

- notation: <19, 30, 44, 53, 66, 70|
- errors (absolute): [-0.0c, -7.2c, -7.4c, -21.5c, +17.1c, -19.5c]
- errors (relative): [-0.0%, -11.4%, -11.7%, -34.0%, +27.1%, -30.8%]
- TE simple badness: 35.440- subgroup: 2.3.5.7.11.13

- tempers out 3-limit 1162261467/1073741824 (Pythagorean-19 comma)
- tempers out 5-limit 81/80 (syntonic comma, Didymus comma)
- tempers out 5-limit 3125/3072 (small diesis, magic comma)
- tempers out 5-limit 6561/6400 (Mathieu superdiesis)
- tempers out 5-limit 15625/15552 (kleisma, semicomma majeur)
- tempers out 5-limit 16875/16384 (double augmentation diesis, Negri comma)
- tempers out 5-limit 78732/78125 (medium semicomma, Sensi comma)
- tempers out 5-limit 1594323/1562500 (Unicorn comma)
- tempers out 5-limit 48828125/47775744 (Sycamore comma)
- tempers out 5-limit 1224440064/1220703125 (parakleisma)
- tempers out 5-limit 19073486328125/19042491875328 ('19-tone' comma)
- tempers out 7-limit 49/48 (slendro diesis, septimal 1/6-tone)
- tempers out 7-limit 126/125 (septimal semicomma, Starling comma)
- tempers out 7-limit 225/224 (septimal kleisma)
- tempers out 7-limit 245/243 (minor BP diesis, Sensamagic comma)
- tempers out 7-limit 525/512 (Avicenna enharmonic diesis)
- tempers out 7-limit 686/675 (senga)
- tempers out 7-limit 875/864 (keema)
- tempers out 7-limit 1029/1000 (keega)
- tempers out 7-limit 3136/3125 (middle second comma)
- tempers out 7-limit 4375/4374 (ragisma)
- tempers out 7-limit 10976/10935 (hemimage)
- tempers out 7-limit 19683/19600 (cataharry comma)
- tempers out 7-limit 59049/57344 (Harrison's comma)
- tempers out 11-limit 45/44 (1/5-tone)
- tempers out 11-limit 56/55 (undecimal diesis, konbini comma)
- tempers out 11-limit 100/99 (Ptolemy's comma)
- tempers out 11-limit 385/384 (undecimal kleisma, Keemun comma)
- tempers out 11-limit 540/539 (Swets' comma)
- tempers out 11-limit 729/704 (undecimal major diesis)
- tempers out 11-limit 896/891 (undecimal semicomma, pentacircle)
- tempers out 11-limit 26411/26244 (mechanism comma)
- tempers out 11-limit 65536/65219 (orgonisma)
- tempers out 13-limit 65/64 (13th-partial chroma)
- tempers out 13-limit 78/77 (tridecimal minor third comma)
- tempers out 13-limit 91/90 (medium tridecimal comma, superleap)
- tempers out 13-limit 105/104 (small tridecimal comma)
- tempers out 13-limit 144/143 (Grossma)
- tempers out 13-limit 169/168 (Schulter's comma)
- tempers out 13-limit 196/195 (mynucuma)
- tempers out 13-limit 325/324 (marveltwin)
- tempers out 13-limit 351/350 (ratwolf comma)
- tempers out 13-limit 676/675 (island comma)
- tempers out 13-limit 729/728 (squbema)
- tempers out 13-limit 1001/1000 (fairytale comma)
- tempers out 13-limit 1053/1024 (tridecimal major diesis)
- tempers out 13-limit 2080/2079 (ibnsinma)
- tempers out 13-limit 10985/10976 (cantonisma)

- tempered vs. patent location of 7/6: 4 vs. 4
- tempered vs. patent location of 6/5: 5 vs. 5
- tempered vs. patent location of 5/4: 6 vs. 6
- tempered vs. patent location of 4/3: 8 vs. 8
- tempered vs. patent location of 3/2: 11 vs. 11
- tempered vs. patent location of 7/4: 15 vs. 15
- tempered vs. patent location of 2/1: 19 vs. 19

==== Meantone[7] notation ====

- number of cycles: 1
- 1 primary step = 3 EDO steps
- 1 secondary step = 2 EDO steps
- 1 sharp (# or -) = 1 EDO steps (diatonic)

---- Note names ----

   0. D
   1. D#
   2. Eb
   3. E
   4. E#/Fb
   5. F
   6. F#
   7. Gb
   8. G
   9. G#
  10. Ab
  11. A
  12. A#
  13. Bb
  14. B
  15. B#/Cb
  16. C
  17. C#
  18. Db

---- Keyboard layout ----

   9  12  15  18   2   5   8  11  14  17
  11  14  17   1   4   7  10  13  16   0
  13  16   0   3   6   9  12  15  18   2
  15  18   2   5   8  11  14  17   1   4
  17   1   4   7  10  13  16   0   3   6
   0   3   6   9  12  15  18   2   5   8
   2   5   8  11  14  17   1   4   7  10
   4   7  10  13  16   0   3   6   9  12
   6   9  12  15  18   2   5   8  11  14
   8  11  14  17   1   4   7  10  13  16
  10  13  16   0   3   6   9  12  15  18

==== Meantone[5] notation ====

- number of cycles: 1
- 1 primary step = 3 EDO steps
- 1 secondary step = 5 EDO steps
- 1 sharp (# or -) = -2 EDO steps (pentic)

---- Note names ----

   0. D
   1. E-
   2. D+
   3. E
   4. D++/G--
   5. E+
   6. G-
   7. E++/A--
   8. G
   9. A-
  10. G+
  11. A
  12. G++/C--
  13. A+
  14. C-
  15. A++/D--
  16. C
  17. D-
  18. C+

---- Keyboard layout ----

  13  16   0   3   6   9  12  15  18   2
  18   2   5   8  11  14  17   1   4   7
   4   7  10  13  16   0   3   6   9  12
   9  12  15  18   2   5   8  11  14  17
  14  17   1   4   7  10  13  16   0   3
   0   3   6   9  12  15  18   2   5   8
   5   8  11  14  17   1   4   7  10  13
  10  13  16   0   3   6   9  12  15  18
  15  18   2   5   8  11  14  17   1   4
   1   4   7  10  13  16   0   3   6   9
   6   9  12  15  18   2   5   8  11  14

==== Hanson[7] notation ====

- number of cycles: 1
- 1 primary step = 4 EDO steps
- 1 secondary step = 1 EDO steps
- 1 sharp (# or -) = 3 EDO steps (smitonic)

---- Note names ----

   0. D
   1. Eb
   2. Fb
   3. D#
   4. E
   5. F
   6. Gb
   7. E#/Ab
   8. F#
   9. G
  10. A
  11. Bb
  12. G#/Cb
  13. A#
  14. B
  15. C
  16. Db
  17. B#
  18. C#

---- Keyboard layout ----

  14  18   3   7  11  15   0   4   8  12
  15   0   4   8  12  16   1   5   9  13
  16   1   5   9  13  17   2   6  10  14
  17   2   6  10  14  18   3   7  11  15
  18   3   7  11  15   0   4   8  12  16
   0   4   8  12  16   1   5   9  13  17
   1   5   9  13  17   2   6  10  14  18
   2   6  10  14  18   3   7  11  15   0
   3   7  11  15   0   4   8  12  16   1
   4   8  12  16   1   5   9  13  17   2
   5   9  13  17   2   6  10  14  18   3

YAML输出

tune使用YAML作为显式的音阶格式。你可以使用tune的输出作为外部应用程序的输入,或者反过来。首先导出音阶,然后修改它,最后将其用作另一个tune命令的输入参数。

示例用法

tune scale ref-note 62 --lo-key 61 --up-key 64 steps 1:7:2

输出

---
Scale:
  root_key_midi_number: 62
  root_pitch_in_hz: 293.6647679174076
  items:
    - key_midi_number: 61
      pitch_in_hz: 265.9791296633641
    - key_midi_number: 62
      pitch_in_hz: 293.6647679174076
    - key_midi_number: 63
      pitch_in_hz: 324.23219079306349

依赖关系

~9–38MB
~609K SLoC