Show HN: Cynthia – Reliably play MIDI music files – MIT / Portable / Windows (blaizenterprises.com)
Brief Background - Used midi playback way back in the days of Windows 95 for some fun and entertaining apps, but as Windows progressed, it seemed their midi support (for Win32 anyway) regressed in both startup speed and reliability. Midi playback used to be near instant on Windows 95, but on later versions of Windows this was delayed to about 5-7 seconds. And reliability became somewhat patchy. This made working with midi a real headache.
Cynthia was built to test and enjoy midi music once again. It's taken over a year of solid coding, recoding, testing, re-testing, and a lot more testing, and some hair pulling along the way, but finally Cynthia works pretty solidly on Windows now.
Some of Cynthia's Key Features: * 25 built-in sample midis on a virtual disk - play right out-of-the box * Play Modes: Once, Repeat One, Repeat All, All Once, Random * Play ".mid", ".midi" and ".rmi" midi files in 0 and 1 formats * Realtime track data indicators, channel output volume indicators with peak hold, 128 note usage indicators * Volume Bars to display realtime average volume and bass volume levels * Use an Xbox Controller to control Cynthia's main functions * Large list capacity for handling thousands of midi files * Switch between up to 10 midi playback devices in realtime * Playback through a single midi device, or multiple simultaneous midi devices with lag and channel output support * Custom built midi playback engine for high playback stability * Custom built codebase for low-level work to GUI level * Also runs on Linux/Mac (including apple silicon) via Wine * Smart Source Code - compiles in Borland Delphi 3 and Lazarus 2 * MIT License
YouTube Video of Cynthia playing a midi: https://youtu.be/IDEOQUboTvQ
GitHub Repo: https://github.com/blaiz2023/Cynthia
19 comments
[ 2.6 ms ] story [ 34.2 ms ] threadThis is (pun intended) music to my ears!
It’s pretty consistent these days that when some indie / hobby app appears and is lightweight, there’s a very decent chance it’s Delphi, Free Pascal, or similar. A bit of a secret weapon in the Electron age.
Then I saw the instrument / note grid, and the keyboard UI - this looks fun!
Have tried the modern community edition of Embarcadero Delphi a couple of times over the years, but found its layers on layers of source code and object inheritance complexity really shocking. I can only imagine the poor souls that have to maintain that mess.
Something like trying to ascertain simple logic pathways through their code in order to understand function limits or compatibility issues was a real nightmare/time consuming. Let alone attempting to predict or change core functionality.
And they did away with 8 bit ANSI strings, which were at times rather handy for some basic IO work and data processing. More than anything, you knew were you stood in your data at all times.
Another annoying thing was there bitmap handler, which required you to lock it in order to access it's internal pixels for data processing - think this was for compatibility with mobile chips - which from my basic observations did a full read and write (copy) of the image data - slowish. A simple binary data handler to mimic a system bitmap got right round that bottleneck.
a) 3 Mb OPL3.zip (contains one file "OPL3.SF2") - compact but pretty good: https://www.vogons.org/download/file.php?id=45715
and was sourced from: https://www.vogons.org/viewtopic.php?t=59354
b) 128 MB OPL-3_FM_128M.zip (contains one file "OPL-3_FM_128M.sf2") - a bit larger but slightly better in my opinion: https://musical-artifacts.com/artifacts/15/OPL-3_FM_128M.zip
and was sourced from: https://midis.fandom.com/wiki/OPL-3_FM_128M.sf2_(OPL3_Yamaha...
You can direct Cynthia to output her midi notes/instructions to a different midi device/devices for higher quality playback/sound reproduction through the midi driver apps below (for Windows):
a) VirtualMIDISynth (supports up to 4 simultaneous drivers with option to use one or more different soundfonts per driver): https://coolsoft.altervista.org/en/virtualmidisynth
b) OmniMIDI: https://www.majorgeeks.com/files/details/keppys_synthesizer....
The apps above do a nice job at playback with minimal lag and without much setup or tweaking to get going. Basically just install one, assign a soundfont, and restart Cynthia to be able to select a different midi device - numbered 1 to 10 under Playback Device (bottom right panel of main GUI).
At one point in the past I did look into including soundfont support directly into Cynthia, but instead decided to focus on playback stability and ease-of-use as top priorities, which funnily enough was a mountain enough all-by-itself to climb considering how difficult Windows can be to get along with, let alone get working right on something as simple as midi playback under Win32.
As someone into both music production and retro gaming, my experience of MIDI is that the instrument types are standard but the fidelity and quality of the music varies depending on the samples used. While low-end 90s sound cards had small sample ROMs and better cards had larger sample sets (2 or more MB). More recently there are even larger, very high quality MIDI sample sets which are open source. Also, is General MIDI 2 supported? How about extensions like Roland GS and Yamaha XG?