Make xenharmonic music and explore musical tunings.
microwave
is a microtonal modular waveform synthesizer with soundfont rendering capabilities based on:
It features a virtual piano UI enabling you to play polyphonic microtonal melodies with your touch screen, computer keyboard, MIDI keyboard or mouse. The UI provides information about pitches and just intervals in custom tuning systems.
Option A: Download a precompiled version of microwave
for the supported target architectures:
Option B: Use Cargo to build a fresh binary from scratch for your own target architecture:
```bash
sudo apt install libasound2-dev
cargo install -f microwave ```
microwave
should run out-of-the box on a recent (Ubuntu) Linux, Windows or macOS installation. If it doesn't, the problem is probably caused by the Nannou framework. In that case, try following these instructions.
Hint: Run microwave
with parameters from a shell environment (Bash, PowerShell). Double-clicking on the executable will not provide access to all features!
bash
microwave run # 12-EDO scale (default)
microwave run steps 1:22:2 # 22-EDO scale
microwave run import my_scale.scl # imported scale
microwave run help # Print help about how to set the parameters to start microwave
This should spawn a window displaying a virtual keyboard. Use your touch screen, computer keyboard or mouse to play melodies on the virtual piano.
To enable playback via an external MIDI device you need to specify the name of the output device and a tuning method. The available tuning methods are full
, full-rt
, octave-1
, octave-1-rt
, octave-2
, octave-2-rt
, fine-tuning
and pitch-bend
.
bash
microwave devices # List MIDI devices
microwave run --midi-out name-of-my-device --tun-method octave-1
microwave run --midi-in "name of my device" --tun-method octave-1 # If the device name contains spaces
To listen for events coming from a external MIDI device you only need to specify the name of the input device:
bash
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
For playback of sampled sounds you need to provide the location of a soundfont file. The location can be set via the environment variable MICROWAVE_SF_LOC
or the command line:
bash
microwave run --sf-loc /usr/share/sounds/sf2/default-GM.sf2 steps 1:22:2
If you like to use compressed sf3 files you need to compile microwave
with the sf3
feature enabled. Note that the startup will take significantly longer since the soundfont needs to be decompressed first.
The command-line enables you to set set up sample rates, buffer sizes and many other audio parameters. To print a full list of available options run:
bash
microwave run help
On startup, microwave
tries to locate a waveforms file specified by the --wv-loc
parameter or the MICROWAVE_WV_LOC
environment variable. If no such file is found microwave
will create a default waveforms file for you.
Let's have a look at an example clavinettish sounding waveform that I discovered by accident:
yml
name: Funky Clavinet
envelope: Piano
stages:
- Oscillator:
kind: Sin
frequency: WaveformPitch
modulation: None
out_buffer: 0
out_level: 440.0
- Oscillator:
kind: Triangle
frequency: WaveformPitch
modulation: ByFrequency
mod_buffer: 0
out_buffer: 1
out_level: 1.0
- Filter:
kind: HighPass2
resonance:
Mul:
- WaveformPitch
- Envelope:
name: Piano
from: 2.0
to: 4.0
quality: 5.0
in_buffer: 1
out_buffer: AudioOut
out_level: 1.0
This waveform has three stages:
Piano
and ranges from 2F to 4F. Write the result to AudioOut
.To create your own waveforms use the default waveforms file as a starting point and try editing it by trial-and-error. Let microwave
's error messages guide you to find valid configurations.
You can live-control your waveforms with your mouse pointer or any MIDI Control Change messages source.
The following example stage defines a resonating low-pass filter whose resonance frequency can be controlled with a MIDI modulation wheel/lever from 0 to 10,000 Hz.
yml
Filter:
kind: LowPass2
resonance:
Control:
controller: Modulation
from: 0.0
to: 10000.0
quality: 5.0
in_buffer: 0
out_buffer: AudioOut
out_level: 1.0
bash
microwave run --wv-loc <waveforms-file-location> [scale-expression]
bash
microwave run --sf-loc <soundfont-file-location> [scale-expression]
bash
microwave run --midi-out <midi-target> --tun-method <tuning-method> [scale-expression]
bash
microwave run --audio-in [scale-expression]
bash
microwave run --midi-in <midi-source> [scale-expression]
--kb2
option)For a complete list of command line options run
bash
microwave help
microwave
statically links against fluidlite
for soundfont rendering capabilities. This makes the binary executable of microwave
a derivative work of fluidlite
. fluidlite
is licensed under the GNU Lesser General Public License, version 2.1.