#合成器 #MIDI #模块化 #微音调 #键盘布局 #钢琴 #输入事件

app microwave

制作异调音乐并探索音乐调音

36 个重大版本

0.37.0 2024 年 7 月 11 日
0.36.0 2023 年 12 月 4 日
0.35.0 2023 年 5 月 12 日
0.34.0 2023 年 2 月 22 日
0.7.1 2020 年 7 月 26 日

音频 中排名 #239

Download history 7/week @ 2024-07-02 118/week @ 2024-07-09 3/week @ 2024-07-16 76/week @ 2024-07-23 45/week @ 2024-07-30

每月下载量 125

MITLGPL-2.1

6MB
18K SLoC

制作异调音乐并探索音乐调音。

概述

microwave 是一个基于 tune(一个微音调库)的微音调模块化波形合成器和效果处理应用程序,具有基于 magnetron(一个模块化合成器架构)、fluid-xenth(一个微音调音源渲染器)和 Bevy(一个图形和游戏引擎)的功能。

  • tune – 一个微音调库
  • magnetron – 一个模块化合成器架构
  • fluid-xenth – 一个微音调音源渲染器
  • Bevy – 一个图形和游戏引擎

该应用程序允许音乐家使用触摸屏、计算机键盘、MIDI 键盘或鼠标等各种输入方法演奏多声部微音调音乐。

应用程序的用户界面提供有关自定义调音系统中音高和纯间隔的信息,并允许用户在包括 Lumatone 这样的等距键盘布局之间切换。

内置的模块化合成引擎不使用任何固定架构,可以自定义以响应各种输入事件。

资源

功能

一流的微音调支持

  • 指定自定义音阶(音阶表达式
  • 导入 SCL 和 KBM 文件
  • 使用各种调音技术连接到 MIDI-out
  • 显示频率和近似纯比
  • 渲染等距和线性键盘,包括不规则键盘

Lumatone 和等距布局

  • 为 Meantone、Mavila、Porcupine、Tetracot 和 Hanson 音阶找到自动键盘布局
  • 混合音阶颜色和步长大小以创建新布局
  • 压缩或扩展布局以获得更好的人体工程学设计
  • 定义自定义布局和颜色方案
  • 将等距布局发送到 Lumatone

不规则自定义颜色方案

Porcupine[8] 颜色方案与 Meantone[7] 布局和平键

上述布局已同步到 Lumatone

合成器

  • 模块化波形合成器
  • 可自定义音频处理阶段
  • 物理建模合成
  • Soundfont 渲染器
  • 麦克风/辅助输入
  • WAV 录音

控制

  • 通过 MIDI-in 的序列器/钢琴键盘
  • 通过 MIDI-in 的 Lumatone/多通道输入
  • 计算机键盘(同构输入)
  • 触摸屏(音高和键压)
  • 鼠标(音高和呼吸)
  • 通道事件(弯音、调制、踏板、通道压力等)
  • 多声部事件(键压)
  • 低频源(包络、振荡器、滑动条等)

效果

  • 低通滤波器
  • 二阶低通滤波器
  • 高通滤波器
  • 二阶高通滤波器
  • 带通滤波器
  • 陷波滤波器
  • 全通滤波器
  • 混响
  • 空间延迟
  • 旋转扬声器

浏览器支持

  • 无需安装任何新软件即可使用所有功能。

下载/安装

选项 A:在浏览器中运行 microwave 而无需安装任何附加软件。

选项 B:下载适用于支持的目标架构的预编译版本的 microwave

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

# If you are using Linux: Make sure all dev dependencies are installed.

# On the CI environment (Ubuntu based) we only need to add two dev dependencies:
sudo apt install libasound2-dev libudev-dev

# Make sure pkg-config is installed
sudo apt install pkg-config

cargo install -f microwave

microwave 应能在最新的 (Ubuntu) Linux、Windows 或 macOS 安装上即开即用。如果不行,问题可能是由 Bevy 框架引起的。在这种情况下,请尝试按照以下 说明 进行操作。

使用方法

提示:从壳环境(Bash、PowerShell)中运行 microwave 参数。双击可执行文件将无法访问所有功能!

microwave run                       # 12-EDO scale (default)
microwave run steps 1:22:2          # 22-EDO scale
microwave run scl-file my_scale.scl # imported scale
microwave run help                  # Show help explaining how to set the parameters to start microwave

此操作应打开一个窗口,提供访问虚拟同构键盘。您可以使用触摸屏、计算机键盘、MIDI 键盘或鼠标在键盘上演奏旋律。

Lumatone 模式

在 Lumatone 模式下运行时,microwave 将自动将当前显示的布局(颜色和 MIDI 设置)与您的 Lumatone 同步。万岁!您再也不必花费几个小时使用 Lumatone 编辑器手动配置每个键了!

要使用以下命令在 Lumatone 模式下运行 microwave

microwave luma <midi-out-device> --midi-in <midi-in-device> steps 1:31:2

通常,<midi-out-device><midi-in-device> 都解析为 Lumatone。然而,对于某些 MIDI 设置,这可能并不成立。

配置文件 – 配置 Microwave

在启动时,microwave 尝试加载由 -p / --profile 参数或 MICROWAVE_PROFILE 环境变量指定的配置文件。如果找不到此类文件,microwave 将为您创建一个默认配置文件。

示例配置文件

microwave 配套以下示例配置文件

  • audio-effect.yml:演示如何配置仅效果配置文件。
  • microwave.yml:第一次启动时创建的默认配置文件。
  • sympathetic.yml:演示如何使用音符输入控制的波导来实现谐振效应。

要使用配置文件,请运行

microwave run -p <profile-name>

配置文件结构

配置文件具有以下结构

num_buffers:   # Number of main audio buffers
audio_buffers: # Indexes of the buffers (stereo) whose content is played back on the main audio device
globals:       # Globally computed values to be used in the main audio stages
templates:     # Reusable fragments to be used by the Magnetron synthesizer
envelopes:     # Reusable envelopes to be used by the Magnetron synthesizer
stages:        # Stages that can create or process audio or MIDI data
color_palette: # Defines the colors to draw from when generating automatic color schemas

低频(LF)源

几乎所有数值型轮廓参数都可以实时更新。为了保持音频引擎的性能,更新通常以比音频采样率低得多的速率进行评估。因此,LF源可以增加演奏的控制性和表现力,但并不适合用于频谱音调调制。

要定义一个LF源,可以使用以下数据类型:

  • 数字,例如:
    frequency: 440.0
    
  • 字符串,引用一个命名模板,例如:
    frequency: WaveformPitch
    
  • 嵌套的LF源表达式,例如:
    frequency: { Mul: [ 2.0, WaveformPitch ] }
    
    或者(使用缩进样式):
    frequency:
      Mul:
        - 2.0
        - WaveformPitch
    

不幸的是,目前还没有详细的LF源文档。然而,通过示例轮廓、microwave的错误信息和基本的YAML知识,您应该能够找到有效的LF源表达式。

globals部分

轮廓的globals部分定义了全局范围内评估的命名LF源,以便供下游消费者使用。所有全局消费者接收到的值完全相同。例如,如果您需要一个期望在多个声部或效果中同步的振荡信号,这很有用。

要为参数分配全局值,请使用以下语法:<name-of-parameter>: { Global: <name-of-global> }。全局可以引用其他全局,只要引用的全局出现在列表中较早的位置。

templates部分

templates部分的目的是定义最重要的LF源,以便它们不必反复重新定义。模板可以理解为在一旦使用就会内联到计算图中的计算片段。

要使用模板,请提供一个模板名称作为单个字符串参数。示例:

frequency: WaveformPitch
fadeout: Fadeout
out_levels: [EnvelopeL, EnvelopeR]

模板可以引用其他模板,但不允许自我调用,以避免无限递归。

默认的microwave.yml轮廓包含一些重要的内置模板,将在以下部分中解释。

WaveformPitchWaveformPeriod模板

templates:
  - name: WaveformPitch
    value:
      Mul:
        - Property: WaveformPitch
        - Semitones:
            Controller:
              kind: PitchBend
              map0: 0.0
              map1: 2.0
  - name: WaveformPeriod
    value:
      Mul:
        - Property: WaveformPeriod
        - Semitones:
            Controller:
              kind: PitchBend
              map0: 0.0
              map1: -2.0

给定的片段定义了名为WaveformPitchWaveformPeriod的模板。输出值是通过读取波形WaveformPitch/WaveformPeriod属性并将其乘以音高轮值(以全音为单位)来计算的。

注意:对音高轮事件做出反应不是microwave的硬编码功能,而是用户可以自己定义的行为!

Fadeout模板

templates:
  - name: Fadeout
    value:
      Controller:
        kind: Damper
        map0: { Property: OffVelocitySet }
        map1: 0.0

Fadeout模板提供了一个描述波形应该被淡出的程度的值。它以以下方式工作:

  • 当键被按下时,OffVelocitySet解析为0.0。因此,无论制音踏板状态如何,Controller也会解析为0.0。因此,波形保持稳定。
  • 一旦键被释放,OffVelocitySet将解析为1.0。现在,Controller将在1.0(map0 = 制音踏板释放)和0.0(map1 = 制音踏板按下)之间进行插值。因此,除非按下制音踏板,否则波形将淡出。

注意:与前面的示例一样,对阻尼踏板的反应不是硬编码到 microwave 中的功能,而是一种可定制的行为。

EnvelopeLEnvelopeR 模板

templates:
  - name: EnvelopeL
    value:
      Mul:
        - Controller:
            kind: Pan
            map0: { Property: Velocity }
            map1: 0.0
        - Controller:
            kind: Volume
            map0: 0.0
            map1: 0.25
  - name: EnvelopeR
    value:
      Mul:
        - Controller:
            kind: Pan
            map0: 0.0
            map1: { Property: Velocity }
        - Controller:
            kind: Volume
            map0: 0.0
            map1: 0.25

这些模板旨在提供一个合理的包络幅度 ≈ -18dB,该幅度对声像控制器、音量控制器和按下键的力度敏感。结果是以下量的乘积

  • 声像控制器:从 1 到 0(左声道)或从 0 到 1(右声道)(≈ -6dB)
  • 力度控制器:从 0 到 0.25(≈ -12dB)
  • 键力度:从 0 到 1

注意:您不必将包络幅度与这些量绑定。例如,您可以替换声像控制器为平衡控制器。使用与您的用例相匹配的低频源。

envelopes 部分

每个波形都需要引用在配置文件 envelopes 部分中定义的包络。包络将内部波形缓冲区的结果传输到主音频管道,并限制波形的寿命。

包络定义通常如下所示

envelopes:
  - name: Piano
    in_buffer: 7
    out_buffers: [0, 1]
    out_levels: [EnvelopeL, EnvelopeR]
    fadeout: Fadeout
    attack_time: 0.01
    decay_rate: 1.0
    release_time: 0.25

具有

  • name:包络的名称。
  • in_buffer:包含应被包络的信号的波形缓冲区。
  • out_buffers:应将包络信号写入的主音频管道的(立体声)缓冲区。
  • out_levels:在写入主音频管道时应用的幅度因子。使用 EnvelopeL/EnvelopeR 作为值是有意义的,但用户可以选择他们认为有用的任何低频源表达式。
  • fadeout:波形应淡出的量。重要:如果此值设置为常数 0.0,则波形将永远不会淡出,并继续消耗 CPU 资源,最终可能导致音频线程过载。
  • attack_time:线性攻击时间(秒)。
  • decay_rate:攻击阶段完成后,1/秒(逆半衰期)的指数衰减率。
  • release_time:线性释放时间(秒)。当 fadeout 除以 release_time 乘以 dt 的积分达到 1.0 时,波形被认为耗尽。

stages 部分 / 主音频管道

stages 部分定义了在主音频线程运行时依次评估的章节。并非所有章节(例如 MidiOut)都贡献于主音频管道,但鉴于它们将被添加到用户界面,因此在这里声明它们也是合理的。其中一些阶段,即 输出目标,对音符输入敏感。在这种情况下,必须设置 note_input 属性,它可以具有以下值

  • 前景:仅在指定的输出目标当前活动时激活音符。
  • 背景:在接收到音符事件时始终激活音符。

磁控管合成器 – 创建您自己的波形

要启用模块化的 magnetron 合成器引擎,请添加以下阶段

stages:
  - stage_type: Magnetron
    note_input: Foreground
    num_buffers: # Number of waveform audio buffers
    waveforms:   # Waveform definitions

waveforms 部分

waveforms 部分定义了在触发波形时依次应用的波形渲染阶段。

您可以根据需要混合和匹配任意多个阶段,以创建您所需的定制声音。以下示例配置定义了一个意外发现的类似古钢琴音色的波形。

waveforms:
  - name: Funky Clavinet
    envelope: Piano
    stages:
      - stage_type: Generator
        generator_type: Oscillator
        out_buffer: 0
        out_level: 440.0
        oscillator_type: Sin
        frequency: WaveformPitch
      - stage_type: Processor
        in_buffer: 0
        out_buffer: 1
        processor_type: Oscillator
        oscillator_type: Triangle
        frequency: WaveformPitch
        modulation: ByFrequency
      - stage_type: Processor
        in_buffer: 1
        out_buffer: 7
        processor_type: Filter
        filter_type: HighPass2
        resonance:
          Mul:
            - WaveformPitch
            - Fader:
                movement: 10.0
                map0: 2.0
                map1: 4.0
          quality: 5.0

渲染声音时应用以下阶段:

  1. 生成具有波形标称频率 F 和振幅 440 的正弦波。将此波形写入缓冲区 0。
  2. 生成频率为 F 和振幅为 1.0 的三角波。以缓冲区 0 中存储的量对波形频率(以赫兹为单位)进行逐样本调制。将调制后的波形写入缓冲区 1。
  3. 对缓冲区 1 中存储的样本应用二阶高通滤波器。高通滤波器的共振频率在 0.1 秒内从 2F 上升到 4F。将结果写入缓冲区 7。
  4. 围绕缓冲区 7 中的信号包裹一个包络,并将包裹后的信号传输到主音频管道的缓冲区 0 和 1。这是在 envelopes 部分的 Piano 包络中定义的行为(见上文)。

要创建自己的波形,请以默认配置文件为起点,并尝试通过试错法编辑它。让 microwave 的错误信息引导您找到有效的配置。

Fluid 合成器

对于播放采样声音,您需要在阶段部分添加一个 Fluid 阶段。

以下示例启动了一个 Fluid 阶段,该阶段渲染指定声音字体文件的内容。渲染的音频将被写入主音频管道的音频缓冲区 01

stages:
  - stage_type: Fluid
    out_buffers: [0, 1]
    note_input: Foreground
    soundfont_location: <soundfont-location>

SF3 支持

如果您想使用压缩的 sf3 文件,您需要使用启用 sf3 功能的 microwave 进行编译。请注意,启动将需要更长的时间,因为需要首先解压缩声音字体。

效果 – 创建您自己的

要添加您自己的定制效果,请添加一个带有 processor_type: EffectStereoProcessor 阶段。以下配置将向主音频管道添加一个旋转扬声器效果阶段。

stages:
  - stage_type: StereoProcessor
    in_buffers: [4, 5]
    out_buffers: [14, 15]
    processor_type: Effect
    effect_type: RotarySpeaker
    buffer_size: 100000
    gain:
      Controller:
        kind: Sound9
        map0: 0.0
        map1: 0.5
    rotation_radius: 20.0
    speed:
      Fader:
        movement:
          Controller:
            kind: Sound10
            map0: -2.0
            map1: 1.0
        map0: 1.0
        map1: 7.0

该配置定义了以下属性:

  • in_buffers:缓冲区 4 和 5 用于作为效果输入。
  • out_buffers:缓冲区 14 和 15 用于作为效果输出。
  • buffer_size:固定延迟缓冲区大小为 100000 个样本。
  • gain:输入增益范围为 0.0 到 0.5。输入增益可以通过 F9 键或 MIDI CCN 78 控制。
  • rotation_radius:旋转半径为 20 厘米。
  • speed:旋转速度范围为 1 Hz 到 7 Hz。所选速度由 Fader 组件确定,该组件将在两个值之间逐渐淡入淡出。摇杆的运动由 F10 键或 MIDI CCN 79 控制,范围从 -2.0/s 到 1.0/s,以模拟旋转扬声器的减速和加速。

MIDI 出

要启用通过外部 MIDI 设备播放,请将以下阶段添加到音频管道中

stages:
  - stage_type: MidiOut
    note_input: Foreground
    out_device: <midi-device>
    out_channel: 0
    num_out_channels: 9
    device_id: 127
    tuning_program: 0
    tuning_method: <tuning-method>

可用的调音方法有 fullfull-rtoctave-1octave-1-rtoctave-2octave-2-rtfine-tuningpitch-bend

要检索可用 MIDI 设备的列表,请运行

microwave devices

MIDI 入

要监听来自外部MIDI设备的事件,您需要指定输入设备的名称

microwave devices # List MIDI devices
microwave run --midi-in name-of-my-device
microwave run --midi-in "name of my device" # If the device name contains spaces

要使 microwave 能够接收来自多通道MIDI源(如Lumatone)的事件,您需要扩展键范围并定义通道特定的音符偏移。

实时交互

您可以使用鼠标指针、触摸板或任何MIDI控制更改消息源实时控制您的波形和效果。

以下示例阶段定义了一个谐振低通滤波器,其谐振频率可以通过2,000到10,000 Hz范围内的MIDI调制轮/杆进行控制。

stage_type: Processor
in_buffer: 0
out_buffer: 7
processor_type: Filter
filter_type: LowPass2
resonance:
  Controller:
    kind: Modulation
    map0: 2000.0
    map1: 10000.0
quality: 5.0

如果您想使用鼠标的垂直轴进行声音控制,请使用 Breath 控制器。

resonance:
  Controller:
    kind: Breath
    map0: 2000.0
    map1: 10000.0

如果您想使用触摸板进行多声部声音控制,请使用 KeyPressure 属性。

resonance:
  Linear:
    input:
      Property: KeyPressure
    map0: 2000.0
    map1: 10000.0

注意:虽然 Controller 值已缩放到0..1(在音调弯曲事件的情况下为-1..1),并且需要范围映射(map0/map1 参数),但 Property 值可以直接解析。如果需要,可以使用 MulLinear 进行重新缩放。

更多设置

命令行允许您设置采样率、缓冲区大小和其他启动参数。要打印完整列表的可用命令行参数,请运行

microwave run help
# 31-EDO Lumatone preset centered around D4 (62, Layout offset -5)
microwave ref-note 62 --root 57 --luma-offs 31 --lo-key 0 --up-key 155 --midi-in lumatone steps 1:31:2

浏览器应用程序

浏览器应用程序允许您使用 microwave 及其所有功能,而无需安装任何额外的软件。只需在您的网络浏览器中打开 Web Launcher

Web Launcher 充当命令行终端,允许您使用前几节中显示的命令行参数启动 microwave

要与浏览器应用程序读取和写入的文件进行交互,请打开 文件管理器,它便于您在文件系统和应用程序之间交换文件。

注意:microwave 管理的文件存储在浏览器本地索引数据库中。不会与远程服务器交换任何数据!

帮助

要获取完整的命令行选项列表,请运行

microwave help

许可协议

microwave 静态链接到 OxiSynth 以提供音源渲染功能。这使得 二进制可执行文件 成为 OxiSynth 的派生作品。OxiSynth 根据 GNU Lesser General Public License,版本 2.1 许可。

依赖项

~35–69MB
~1M SLoC