Aeronaut is a minimal synthesizer built to be controlled and play sounds by receiving UDP messages. This is very much a rebuild of an amazing synthesizer called Pilot and has also been created to be a companion application to the livecoding environment ORCA.
To run Aeronaut, run these commands:
git clone https://github.com/Kyle-Shanks/Aeronaut.git
npm install
npm start
git clone https://github.com/Kyle-Shanks/Aeronaut.git
yarn install
yarn start
Standalone builds for Mac/Windows/Linux that can be made for download if there is interest. Feel free to leave an issue on the repo :)
Aeronaut is composed of 4 primary synths, 10 simple synths, and 2 noise synths.
The 4 primary synths at the top have their own individual effects (Vibrato, Stereo Panning, Delay, Distortion, Filter, and Reverb) and are routed directly to the master dynamics chain (Compressor, Equalizer, and Master Volume).
The 10 simple synths and 2 noise synths share a chain of 4 effects (Distortion, Bit Crusher, Filter, and Reverb) which is then routed to the master dynamics chain.
Commands can be received either from UDP (port 49161) or manually input in the input bar on the bottom. Multiple commands can be sent by separating them with a ;
.
e.g. 03C;13d;23a
will play a cm7 famichord
Global commands can be run to update master effects and things like the Bpm with these commands:
DIS/BIT/FIL/REV - Master effects
COM/EQU/VOL - Master Dynamics
BPM - Bpm (Used for note lengths and effects like delay)
Command | Operation | Info |
---|---|---|
DIS20 |
Distortion | Update master distoration |
VOLBF |
Master Volume | Update master volume to 75% |
BPM110 |
Bpm | Set Bpm to 110 |
Commands can run for a specific channel by using the channel id at the beginning of the command. e.g. 03C
will play a C (3rd Octave) on channel 0.
The standard format for playing notes goes:
(Channel Id)[0-F] (Octave)[0-6] (Note)[A-z] (Velocity)[0-F] (Length)[0-F]
For the note input, lowercase letters represent sharps. e.g. f === F#
Command | Channel | Octave | Note | Velocity | Length |
---|---|---|---|---|---|
04C |
0 | 4 | C | 100% | 1/8 |
04Ca |
0 | 4 | C | 75% | 1/8 |
04Cab |
0 | 4 | C | 75% | 1bar |
0: No Length
1: 1/32nd note
2: 1/24th note
3: 1/16th note
4: 1/12th note
5: Eighth note (1/8)
6: 1/6th note
7: Quarter note (1/4)
8: 1/3rd note
9: Half note (1/2)
A: 3/4th note
B: Whole note/1 bar
C: 1.5 bars
D: 2 bars
E: 3 bars
F: 4 bars
All channels have a gain envelope, volume, and oscillator (except for noise synths) that can be updated with these basic channel commands:
Command | Channel | Name | Info |
---|---|---|---|
0ENV056f |
0 | Envelope | Set Attack:0.00, Decay:0.33, Sustain:0.40 and Release:1.00 |
1VOLbf |
1 | Volume | Set Volume:0.75 |
2OSCsq |
2 | Oscilloscope | Set Osc:Square |
The oscillators available are sine (SI), triangle (TR), square (SQ), and sawtooth(sw).
The 4 primary synths also have access to commands that will update their individual effects:
Command | Channel | Operation | Info |
---|---|---|---|
0DEL26 |
0 | Delay | Set Delay Time: 0.125 , Delay Amount: 0.4 |
3REV20 |
3 | Reverb | Set Reverb Amount: 0.1255 |
VIB - [Vibrato] (Depth [0-F], Rate [0-F])
PAN - [Stereo Panning] (Left amount [00-7F]/Right amount [80-FF])
DEL - [Delay] (Delay Time[0-F], Wet/Dry [0-F])
DIS - [Distortion] (Wet/Dry [00-FF])
BIT - [Bit Crusher] (Bit Depth [0-F], Wet/Dry [0-F])
FIL - [Filter] (Lowpass amount [00-7F]/Highpass amount [80-FF])
REV - [Reverb] (Wet/Dry [00-FF])
COM - [Compressor] (Cutoff [0-F], Ratio [0-F])
EQU - [Equalizer] (Low Gain [0-F], High Gain [0-F])
VOL - [Volume] (Gain [00-FF])
A copy of the current state can be saved with Ctrl+S/Cmd+S
.
A preset can be loaded with Ctrl+O/Cmd+O
.
Press Ctrl+R/Cmd+R
to record, and press it again to stop and save the recording. Currently outputs a .opus
file, but this can easily be converted to other formats online.
- Sync delay effect delay time to the bpm
- Add a built in converter from opus to wav
- Use the empty space on noise synths for something to help with more diverse noise sounds. Maybe a filter?