A hardware-aware DAW for the Sega Mega Drive.
68 changes since v0.8.0.
Downloads
| platform | portable | installed |
|---|---|---|
| Windows x86-64 | mdd-0.9.0-windows-x86_64-portable.zip |
mdd-0.9.0-windows-x86_64-setup.exe |
| Linux x86-64 | mdd-0.9.0-linux-x86_64-portable.tar.gz |
mdd-0.9.0-linux-x86_64-installer.tar.gz |
| Linux arm64 | mdd-0.9.0-linux-arm64-portable.tar.gz |
mdd-0.9.0-linux-arm64-installer.tar.gz |
| macOS x86-64 | mdd-0.9.0-mac-x86_64-portable.tar.gz |
mdd-0.9.0-mac-x86_64.dmg |
| macOS arm64 | mdd-0.9.0-mac-arm64-portable.tar.gz |
mdd-0.9.0-mac-arm64.dmg |
A portable copy keeps its settings, projects and banks in a userdata folder beside the
executable, so it can live on a memory stick and leaves nothing behind. An installed copy
keeps them under your documents. Both are the same application, and the updater offers
whichever kind you already have.
Checking a download
SHA256SUMS lists every file, and each file has a .sigstore bundle beside it,
SHA256SUMS included. The signature is what proves a download came from this repository: a
checksum on its own only proves the file matches whichever list you read it from.
:::sh
sha256sum -c SHA256SUMS --ignore-missing
cosign verify-blob --bundle SHA256SUMS.sigstore \
--certificate-identity-regexp '^https://github.com/MeguminBOT/md-synth-daw/' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
SHA256SUMS
The same workflow records build provenance, which the GitHub CLI reads:
:::sh
gh attestation verify mdd-0.9.0-windows-x86_64-portable.zip --repo MeguminBOT/md-synth-daw
What changed
68 changes, grouped by the part of the application they moved
### The song model (5) - A console frame is named once, on the tempo map - The tempo map finds a position by bisection - Note names are spelt from tables made once - A piece and a pattern carry a time signature, kept in a project and in MIDI - A track can be soloed, and while any is only the soloed tracks are heard ### Playback and export (5) - **Render** The chips take register writes from the stream alone - **Render** A piece at 50 Hz plays the way a PAL console plays music written for 60 - **Sequencer** The driver's busy flag runs from the console's own clock - **Sequencer** The pacing stream is made before the render thread needs it - **Sequencer** A square keeps its note through a silence, and latches as the part does ### File formats (1) - **Midi** A sysex that claims more than its track holds ends the track ### Editors and panels (35) - **Bar** The transport, status bar and tools draw without allocating - **Bar** The frame rate changes under the transport lock - **Bar** The time signature is chosen on the transport, a pattern's from its menu - **Bar** The monitoring volume reads out in decibels as it is dragged - **Editor** The tracker asks whether a track is soloed once per lookup - **Editor** The roll, the playlist and the lanes shade bars through one helper - **Editor** The roll, the tracker and the lanes draw without allocating - **Editor** The tracker reads the whole piece, and a lock holds it to the pattern - **Editor** Grids, rulers and bar counts follow the time signature, bars shaded - **Editor** A wide automation lane opens on a readable span rather than every value - **Editor** Rows outside the chosen scale draw clearly darker than the rows in it - **Editor** An automation point dragged with Ctrl keeps the pointer on it - **Editor** The automation tab follows the pattern chosen while it is open - **Film** The style panel labels its controls once it is laid out - **Film** The preview gives its faces back, and its textures grow in steps - **Film** A shadow, borders outside and inside, and a bevel on any layer, following its shape - **Film** A lane can show the note its part is playing, in the preview and the video - **Film** Every part's lane moves, sizes and turns on its own - **Film** A video style editor, in a window of its own beside the main one - **Film** A style writes lines of text with a border, in any face, filled from the piece - **Film** A video is drawn from a style: its ground, its pictures and where its lanes sit - **Monitor** A scope lane reduced to its highs and lows draws no joins - **Monitor** The scope weighs its spectrum by a window and can smooth its waveform - **Monitor** The meter, the timeline and the warnings draw without allocating - **Overlay** The sheets draw without allocating - **Playlist** Bar numbers and clip labels draw without allocating - **Playlist** A track header carries a solo button, and its menu solos it alone - **Playlist** A fresh playlist opens on sixteen bars, with the grid across the view - **Rack** The rack and the sample list draw without allocating - **Rack** Alt and a click on a channel's solo button solos it alone - **Rack** A channel fader reads out in decibels as it is dragged - **Synth** Decibels are written one way everywhere - **Synth** The synth editors and the browser draw without allocating - **Synth** Operator bars and dials take their fine drag from the root - **Synth** The preset search starts what it finds from the top ### The interface (10) - **Control** A colour swatch, and a colour picker raised as a sheet - **Control** Numbers, dropdowns and tabs draw without allocating - **Control** A menu can fill itself as it opens, and a dropdown can change its length - **Control** A number and a knob take their fine drag from the root - **Paint** An arc takes as many segments as the angle it sweeps - **Paint** A glyph past Latin-1 is found without allocating - **Paint** A polygon wound the other way is cut into the shape it describes - **Widget** A control can keep its tooltip up while it is dragged, as a readout - **Widget** A drag with Ctrl held slows the pointer and moves the real one with it - **Widget** A list that shrinks under its scroll shows what is left of it ### The application (4) - **Files** The updater takes only its own release's files, over https - **Session** The style window takes typed text, and leaves the main one's events - **Session** A preferences file that cannot be written is said once - **Session** The snap offers triplets, and 1/1 snaps to a whole bar ### Window, audio and system (4) - **Draw** SDL is made to run its queue every 65536 vertices - **Draw** A png or jpeg reads into a texture, and a texture draws turned - **System** A whole collection runs past the ceiling while frames draw - **Text** The fonts installed on the machine are listed by the names they give themselves ### Building and packaging (1) - Setup fetches stb_image beside stb_truetype, from the same pinned commit ### The repository (2) - Bump version 0.9.0 - Code nothing calls and imports nothing uses are removed ### Checks (1) - Allocation checks read the thread's own allocatorEvery commit: https://github.com/MeguminBOT/md-synth-daw/compare/v0.8.0...v0.9.0