I wanted an excuse to build a Rust synth engine. I kept putting on long, repetitive ambient music to get into flow, so I made a small terminal app that does that.
Playlist: https://www.youtube.com/playlist?list=PLdHqCi9SgnRY
Install
nooise requires Rust. Install it with rustup:
|
Open a new terminal after rustup finishes, then install nooise:
Start
Use arrows to browse and adjust controls, and Tab to move between layers.
Press Ctrl+Q to quit.
While browsing, hold z for a reverb Bloom, c to Submerge the sound,
v for Echo, or x to Lift its low end out. Release
to stop within 10 ms. Every gesture plays over the whole mix, from any page.
Arrows and Tab keep working while you hold a gesture. These holds require
a terminal that reports key releases; the footer shows when support is missing.
Space is a leader key: a layer key then a parameter (j volume, k filter)
puts the cursor on that control, where h/l move it. The layer keys read
left to right across the tab strip, asdf then qwer, so a is Pads and
r is Master. Skip the layer key to aim at the page you are already on, so
Space k is the filter on whatever is in front of you. It jumps, it does
not edit.
Press Shift+P to stop the clock and let the song end on its tails: nothing
new plays, and reverb, delay, and releasing notes ring out. Press Shift+P
again to start.
See live performance for overlap, saving, the clock stop, and the Jump leader.
Mirrors the beat, chord changes, every voice's level, every musical hit, and
every held gesture as OSC over UDP to
127.0.0.1:9000, where foorm
listens by default. --osc=ADDR sends elsewhere, such as TouchDesigner's
OSC In CHOP. Off unless asked for. See src/fluid/osc.rs for the address
vocabulary.
List the exact input and output port names, then choose one device for both directions or name them separately:
Input and output each default to channel 1. Use --midi-in-channel N and
--midi-out-channel N to choose different channels (1–16). --midi Take5
opens both directions; either directional flag overrides its side. With Pad
MIDI Out on, nooise sends the Pad's current
2–5-note chord at startup and on chord changes, plus 24 MIDI clock pulses per
beat and the transport's Start, Stop, and Continue messages. The Pad chord
releases when another chord starts or the clock stops. MIDI output runs
alongside nooise audio. With --midi or --midi-out, Pad starts with MIDI Out
on and visible, MIDI In off, and Level at 0%, including when loading a song. --midi
still opens the input port for tracks whose MIDI In switch you turn on. An
input-only --midi-in launch starts Pad with MIDI In on and visible, MIDI Out off, and
Level at 0%; raise Pad Level to hear your keyboard through its sound. The
other tracks keep their saved MIDI switches. Pad Trigger and Gate are
hidden by default with or without MIDI. Find either row with / to add it.
Set the receiving synth to follow USB MIDI clock if you want its own timed
features to sync.
Add pad.trigger with /, then change Trigger from Hold to Stabs for a 16-step chord rhythm.
Enter on Trigger opens the Hit/Rest steps. Up/Down selects, Left/Right changes,
and Esc returns to the Pads page. Each step is a sixteenth note. Add the Swing
module to Pads with / to delay the offbeat steps. Stabs follow the Pad's Attack
and Release, use the current progression, and send the same chord hits to audio
and MIDI. Gate sets how many beats each hit stays held, from 0.125 to
2, with a 0.5-beat default. The next hit retriggers the chord even if Gate has
not elapsed. MIDI Note Off starts the external synth's own release envelope;
nooise does not change its ADSR. Hold restores the normal sustained Pad.
Other MIDI switches stay hidden from the Pads, Arp, and Lead pages until you
add one with /: find pad.midi_in, arp.midi_out, or another track's switch
and press Enter. The switch then stays at the bottom of that page even when Off;
Arp and Lead also show MIDI Gate when their Out switch is added. Adding a
switch does not change its On/Off value. A track can use only one direction at a time: turning In on
turns Out off, and vice versa. Pad defaults to Out; Arp and Lead default Off.
Ordinary Pad MIDI In plays incoming pitches with the Pad sound. With a
connected input, Hold-mode Pad audio follows your keyboard. Held Arp input
notes replace its Pad-chord note source until released. Lead input notes play
its sound at their incoming pitch. MIDI input never echoes notes to output.
More than one track can send MIDI, sharing the chosen output channel and the
synth's available voices. MIDI Out never mutes nooise audio.
Arp and Lead play through MIDI even with their audio Level at zero. Their MIDI
Gate rows set the held length of step notes from 0.125 to 2 beats (default 0.5);
a held Lead play key stays on until released.
Pads' Chord Notes row sets how many notes each Pad chord plays in both audio and MIDI. Two keeps the root and fifth; three plays the triad; four keeps the original voicing; five adds a high root. The default is four. For a Take 5 patch with a long release, try two or three to leave voices for the next chord. Arp, Bass, and Lead still follow the original chord tones.
The app checks crates.io at most once every 24 hours while running and shows a small update message when a newer release is available.
Update
Checks crates.io and only reinstalls when a newer release exists.
nooise upgrade does the same thing.
Render to a File
Renders the default mix straight to a wav, no audio device needed. Pass --seed N to make the render reproducible.
From Source