A Multi-Shanty Music Plunderin' Application fer Scallywags an' Sea Dogs Alike — Version 0.1.1
2026-04-13
Ahoy, matey! Welcome aboard Musician's Canvas, a mighty multi-shanty music plunderin' application fer desktop vessels. She supports plunderin' sounds from microphones an' line-in devices, capturin' MIDI treasure from keyboards an' controllers, an' mixin' all yer shanties down to a single WAV or FLAC file. A trusty companion ship, Virtual MIDI Keyboard, provides a software pianer keyboard fer sendin' MIDI notes across the briny deep.
Musician's Canvas be designed fer ease o' use while providin' features commonly found in digital audio workstations (DAWs), savvy?
Run the musicians_canvas executable from the build directory or yer installation berth:
./musicians_canvas
On first launch, the application opens with an empty project, like a blank treasure map. Ye'll need to set a project directory before ye can start plunderin' sounds.
On startup, the application applies the saved theme (dark or light) an', if a project directory was previously charted an' contains a project.json file, the project be automatically loaded fer ye.
Set the project directory: Enter or browse to a folder in the "Project Location" field at the top o' the window. This be where yer plundered recordings an' the project file will be stowed.
Add a shanty: Click the + Add Track button. A new shanty appears with default settings. If it be the only shanty in the project an' has not been recorded yet, it be automatically armed fer plunderin'.
Name the shanty: Type a name in the text field next to the "Options" button. This name be used as the filename fer the recorded audio file, so choose wisely, ye scallywag!

Just below the menu bar, ye'll find a row o' trusty buttons for quick plunderin':

The project file (project.json) stores shanty names, types, MIDI notes, audio file references, an' all project-specific settings. Audio files be stored in the same directory as project.json an' be named after their shanties (e.g., My_Track.flac).
If ye close the application with unsaved changes, a confirmation dialog asks whether to save before abandonin' ship.
While ye have a project open, ye can drag one or more seaworthy audio files from yer file manager (Windows Explorer, macOS Finder, Linux file manager, or whate'er chart ye use) directly onto the Musician's Canvas windo' to haul 'em aboard as fresh audio shanties.
.wav and .flac. Files in any other format be quietly
tossed overboard, an' a dialog at the end lists which files were cast off.Bass Line.wav creates an audio shanty
christened "Bass Line".Each shanty can be configured as either Audio (fer microphone/line-in plunderin') or MIDI (fer keyboard/controller plunderin').
To change the shanty type:
This opens the Track Configuration dialog where ye can select the input source, arr.

Each shanty row provides the followin' controls:
When a project has exactly one shanty an' that shanty has not been recorded yet, it be automatically armed fer plunderin'. This applies both when addin' the first shanty to a new project an' when openin' an existing project that has a single empty shanty. Convenient, that be!
The plundered audio be saved as a FLAC file in the project directory, named after the shanty.
Durin' plunderin' an' replayin', all interactive controls (shanty buttons, settings, etc.) be disabled to prevent accidental changes. Keep yer hands off the riggin' while we're recordin'!
Audio shanties have an Effects button just below Options. It opens Track effects, where ye build a ordered chain o' plunder-time insert effects fer this shanty:

Ye can haul aboard Reverb, Chorus, Flanger, Overdrive / distortion, Amp & cabinet (modelin' amp an' speaker box: amp voice, cabinet, gain, bass/middle/treble, air, an' wet/dry), an' Vibrato (Tremolo).
Vibrato (Tremolo) be that classic Fender “Vibrato” (aye, a tremolo): an oscillatin' change in volume over time. Set Speed fer how fast she pulses, an' Intensity (Depth) fer how deep she dips (from a wee shimmer to a full-on chop).
Spyglass on Amp & cabinet:


Effects be applied when ye click Stop, after the usual capture an' resample. The rig be stored in project.json under audioEffectChain.
Project → Project Settings → Mix Effects lets you build the same kind of ordered effect chain as Track effects (Reverb, Chorus, Flanger, Overdrive / distortion, Amp & cabinet, Vibrato (Tremolo)), but applied to the entire mixed program: when you press Play to hear all enabled tracks together, and when you export with Mix tracks to file (toolbar or Tools menu). The chain is saved in project.json under projectSettings → mixEffectChain.
Project → Project Settings → Aux / Send Bus configures a shared effect chain fed by each track’s Aux send slider (on the track row). The dry mix of all tracks is summed, each track’s post-gain/post-pan signal is scaled by its Aux level and sent through this bus, then the wet aux output is added back to the dry sum before Mix Effects run. Use it for a single shared reverb/delay while keeping per-track insert effects independent.
To reduce harsh digital clipping when processing pushes peaks toward full scale, the effect engine applies a soft limiter to normalized float samples immediately before conversion to 16-bit PCM. The EffectWidget base class documents guardFloatSampleForInt16Pcm() and softLimitFloatSampleForInt16Pcm() for any new real-time code that writes to 16-bit audio.
Each track row includes a compact mixer strip:
Options → Track Configuration also offers Clip trim (non-destructive): Trim start and Trim end skip that many seconds from the beginning and end of the clip for playback, mix, and export without deleting the underlying recording.
MIDI tracks can carry control change (CC) automation stored in the project and in exported .mid files; offline playback and mix use these events when rendering MIDI to audio.
Edit → Undo / Redo (standard shortcuts) apply to mixer and trim changes made on tracks.
Beside the time glass, Hear yer racket live while recordin' sends live plunder to the project's speakin' tubes while ye capture:
The flag be kept in the chart (monitorWhileRecording in project.json). Strike it if ye fear the mic pickin' up the speakers.
When plunderin' a new shanty while other enabled shanties already contain audio or MIDI data, Musician's Canvas performs overdub plunderin': the existing shanties be mixed together an' played back in real time while the new shanty be recorded. This lets ye hear previously plundered parts while layin' down a new one, like singin' harmony with yer crewmates!
The mix o' existing shanties be prepared before capture begins, so plunderin' an' replayin' start at approximately the same instant, keepin' all shanties synchronized like a well-drilled crew.
Musician's Canvas supports two audio capture backends:
The plunderin' backend can be configured per-project in Project > Project Settings > Audio.
Musician's Canvas records at the audio input device's native sample rate an' then automatically converts to the project's configured sample rate using high-quality resamplin'. This means ye can set any project sample rate (e.g., 44100 Hz or 48000 Hz) regardless o' the device's native rate, arr. The conversion preserves pitch an' duration exactly -- no cursed pitch-shiftin' here!
Some audio devices (e.g., USB webcam microphones) be physically mono but are advertised as stereo by the operatin' system -- sneaky bilge rats! Musician's Canvas automatically detects this an' adjusts the channel count accordingly. If the project be configured fer stereo, the mono signal be duplicated to both channels.
MIDI notes be displayed in a piano roll visualization on the shanty.
Musician's Canvas carries a trusty built-in metronome, a steady drummer ye can call upon durin' recordin' to keep yer crew in time. Click the metronome button on the button bar (below the menu bar) to open the metronome settings parchment:

The parchment offers:
When the metronome be enabled, it starts tickin' once recordin' actually begins (after the 3-second countdown be done) and stops when recordin' ends. Yarrr!
Click the Play button to mix an' replay all enabled shanties. The button tooltip changes to indicate whether it will play or record based on whether a shanty be armed. Disabled shanties (unchecked) be excluded from replayin' -- they stay below deck.
Durin' replayin', audio shanties be decoded from their FLAC files an' MIDI shanties be rendered to audio using the built-in FluidSynth synthesizer. All shanties be mixed together an' played through the system's audio output device. 'Tis a grand sound, if ye do say so yerself!
Click the Stop button to end replayin' at any time.
Use Tools > Mix tracks to file (Ctrl+M) to export all enabled shanties to a single audio file. A dialog lets ye choose the output path an' format:
The mix uses the project's configured sample rate. MIDI shanties be rendered using the configured SoundFont.
Use Settings > Configuration (Ctrl+,) to set global defaults that apply to all projects across the seven seas:

recording_debug.txt in the project
directory. This includes the capture backend, device name, sample rate, channel count,
an' timin' data. This be disabled by default an' be primarily useful fer troubleshootin'
plunderin' issues, savvy?

.sf2 SoundFont file fer MIDI synthesis. On Linux, a system SoundFont may be auto-detected if the fluid-soundfont-gm package be installed. On Windows an' macOS, ye must configure the SoundFont path manually, ye landlubber.

Use Project > Project Settings (Ctrl+P) to override global defaults fer the current project only. This be useful fer projects that need a specific sample rate, SoundFont, or audio device. Project-specific settings be saved inside the project.json file, safe in the treasure chest.


The Mix Effects tab is a scrollable list with the same controls as Track effects (Add effect…, drag ≡ to reorder, ✕ to remove). Processing order is top to bottom on the combined mix of all enabled tracks. These effects run during whole-project playback and when mixing to a single WAV or FLAC file; they are not baked into individual track files on disk. An empty list leaves the mixed signal unchanged aside from the mixer's own level handling.
Configure the shared aux effect chain (same effect types as track inserts). Each track’s Aux slider on the track row controls how much of that track’s signal is sent through this bus; the wet aux return is summed with the dry mix before Mix Effects are applied.
| Menu Item | Shortcut | Description |
|---|---|---|
| Save Project | Ctrl+S | Save yer current project to disk |
| Open Project | Ctrl+O | Open an existing project file from the depths |
| Close | Ctrl+Q | Abandon ship (quit the application) |
| Menu Item | Shortcut | Description |
|---|---|---|
| Project Settings | Ctrl+P | Configure project-specific settings (includes Aux / Send Bus) |
| Tempo map | Edit tempo changes (seconds vs BPM) for metronome and MIDI quantization | |
| Add Demo Data to Selected Track | Add sample MIDI notes fer demonstration purposes |
| Menu Item | Shortcut | Description |
|---|---|---|
| Undo | Ctrl+Z | Undo recent mixer/trim edits on tracks |
| Redo | Ctrl+Shift+Z | Redo |
| Menu Item | Shortcut | Description |
|---|---|---|
| Configuration | Ctrl+, | Open global application settings, matey |
| Menu Item | Shortcut | Description |
|---|---|---|
| Mix tracks to file | Ctrl+M | Export all enabled shanties to a single file |
| Export stems to folder | One WAV stem per track (gain/pan/trim; no master Mix Effects) | |
| Recording options | Punch-in region for audio; loop playback for the whole project | |
| Quantize MIDI | Snap MIDI note starts to a grid (all MIDI tracks or armed track only) | |
| Add drum track | D | Add a MIDI drum deck an' a .mid scroll (see below) |
| Virtual MIDI Keyboard | Launch the companion keyboard vessel |
| Menu Item | Shortcut | Description |
|---|---|---|
| Manual | Alt+M | Open the PDF manual in the tongue ye selected |
| About | Show version an' app info |
| Shortcut | Action |
|---|---|
| Ctrl+S | Save project (stow yer treasure!) |
| Ctrl+Z | Undo (mixer/trim) |
| Ctrl+Shift+Z | Redo |
| Ctrl+O | Open project |
| Ctrl+M | Mix shanties to file |
| D | Add drum deck (Tools menu) |
| Ctrl+P | Project Settings |
| Ctrl+, | Settings / Configuration |
| Alt+M | Open PDF manual (Help) |
| Ctrl+Q / Alt+F4 | Quit (abandon ship) |
Tools → Add drum track (hotkey D) adds a MIDI deck on channel 10 General MIDI (index 9). Default name Drums (numbered if taken).
A .mid be writ straight into the project chest: two bars o' 4/4 kick, snare, an' hat. Tempo:
Charts ashore: Audient, MDrummer, Reddit, CS229 PDF.
The Virtual MIDI Keyboard be a companion vessel (virtual_midi_keyboard) that provides an on-screen pianer keyboard fer sendin' MIDI notes across the musical seas. It can be launched from the Tools > Virtual MIDI Keyboard menu in the main application, or run independently as a lone privateer.

The computer keyboard be mapped to pianer keys across two octaves. Here be yer treasure map o' keys:
Lower octave (startin' at the current octave):
| Key | Note |
|---|---|
| Z | C |
| S | C#/Db |
| X | D |
| D | D#/Eb |
| C | E |
| V | F |
| G | F#/Gb |
| B | G |
| H | G#/Ab |
| N | A |
| J | A#/Bb |
| M | B |
Upper octave (one octave higher):
| Key | Note |
|---|---|
| Q | C |
| 2 | C#/Db |
| W | D |
| 3 | D#/Eb |
| E | E |
| R | F |
| 5 | F#/Gb |
| T | G |
| 6 | G#/Ab |
| Y | A |
| 7 | A#/Bb |
| U | B |
| I | C (next octave) |
| 9 | C#/Db |
| O | D |
| 0 | D#/Eb |
| P | E |
Keys light up visually when pressed (white keys turn light blue like the Caribbean sea, black keys darken like a moonless night).
Open the Configuration dialog (Settings > Configuration, Ctrl+,) to set up MIDI an' audio devices:

.sf2 SoundFont file fer the built-in synthesizer.| Shortcut | Action |
|---|---|
| Ctrl+, | Configuration dialog |
| Ctrl+U | Help / Usage info |
| Ctrl+Q | Close (abandon this vessel) |
.sf2) fer playin' back later.Notes show in the piano roll. File > Save Project writes a .mid and project.json into the project folder.
Playback uses FluidSynth with the SoundFont from settings. Eye Settings > Configuration > MIDI (or Project > Project Settings if ye overrode per voyage): a proper .swab — beg pardon, .sf2 — path be required. On Linux a system SoundFont may be found without map; on Windows and macOS ye often pick the file by hand.
They be two separate vessels. Launch Virtual MIDI Keyboard from Tools > Virtual MIDI Keyboard (or sail solo). To pipe the on-screen keys into Musician's Canvas while recordin' MIDI, the OS must route the keyboard's MIDI out to an in that Musician's Canvas listens on — often a virtual MIDI cable or matched ports in both apps. They don't board each other automatic-like.
Settings > Configuration sets global defaults (theme, tongue, MIDI/audio gear, SoundFont, and such). Project > Project Settings overrides fer this project only and lives in project.json. If a field stays at project default, the global Configuration value holds the wheel.
Files be accepted only with a project directory set and when Musician's Canvas ain't playin' nor recordin'. .wav and .flac be welcome; other extensions walk the plank and get listed in a dialog. Each file becomes a new audio track named from the file's stem.
Audio goes in the project directory as <track_name>.flac (characters like / \ : * ? " < > | be replaced with underscores). The voyage log be project.json in the same folder. MIDI tracks save as <track_name>.mid when ye save the project (notes also in project.json).
On mix or playback, MIDI be rendered to a temporary WAV below decks first. If the project path be known, Musician's Canvas also writes a cache FLAC in the project folder: <sanitized_track_name>.flac (same rules as other track booty). The name follows the track name, not a secret hold number.
Nay. Only one track can be armed at a time; it gets the next recording. Build yer chart one layer at a time (overdub plays existin' tracks while ye lay down a new one).
Nay. When enabled, the metronome ticks through system audio fer yer ears only. It ain't mixed into the captured file.
On Windows the main app expects an ASIO driver fer steady low-latency sound. Install ASIO4ALL or a maker's driver if ye hit errors.
In the .app bundle, the Virtual MIDI Keyboard executable be copied inside Musician's Canvas.app (Contents/MacOS/) so one app folder can be handed ashore. Still launch it from Tools > Virtual MIDI Keyboard.
amixer or yer desktop's sound settings to check volume levels. Don't let silence be yer only shanty!.sf2 file) be configured in Settings > Configuration > MIDI. Without a SoundFont, the synth be mute as a dead parrot!fluid-soundfont-gm package be installed.libpipewire-0.3-dev package be installed (needed fer PipeWire integration with the FluidSynth synthesizer).See the README fer complete build instructions fer Linux, macOS, an' Windows, includin' all required dependencies. Fair winds an' smooth compilin' to ye!
Arr, that be the end o' the manual, ye salty sea dog! Now go forth an' make glorious music on the high seas! May yer shanties be mighty an' yer recordings be free o' clippin'! 🏴☠️