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
tosti•2mo ago
ale42•2mo ago
6581•2mo ago
Krssst•2mo ago
It's quite clear they mean more a (much) stricter variation of the "no installation" definition than the "easily buildable on other OS" definition. Though they do mention execution under translation environments as a requirement.
blaiz2025•2mo ago
This also allows the app to run seamlessly on a USB pen stick/harddisk so you can use it on different computers without fuss or being tied down by an installation. The app stores all it's settings etc in a folder alongside the EXE itself, usually "(app name).exe_storage", and automatically manages any references to external filenames/folders on it's own disk drive, allowing it to operate on different computers that might assign its disk drive a random/different drive letter without interrupting access to any referenced filenames/folders.
And no, it's not multi-platform/cross-platform. It's a Win32 (32 bit) binary/codebase. The occasional experiment I have done in the past into cross-platform coding has left me less than impressed. Unfortunately, I'm used to coding at the low-level/API level, and as soon as the programming language starts to abstract away the commands things tend to get dicy for me, and I inevitably find myself lugging around 20+ MB libraries of converted functions, and with no particular guarantee the final app with behave or look similar on different platforms.
Though I do wish such a thing existed. Something like a universal translation layer for all variations of software apps that is hardware accelerated and uniform in execution down to the very last and simple command would be a dream come true. Can't see why in 2025 we are still expected to code and/or compile apps for different operating systems and hardware platforms.
jjmarr•2mo ago
blaiz2025•2mo ago
As for Linux, well... that's more difficult, even under Ubuntu with GUI apps for help. You need to have two audio apps installed and actively running and setup just right in-order for midi to produce any sound on Linux, which are "Qsynth" the midi soundfont player and "QjackCtl/Jack Audio" which is the audio stream controller.
Note, if you're running Linux in a virtual machine chances are it won't handle midi playback properly even if everything is setup right. I tested this under Ubuntu v20 I think a few years back and the midi playback was horribly distorted - don't think the IO rate between the virtual machine and the real machine was up to the job.
Unfortunately on Linux it can be rather difficult to say the least to get midi working right, and more often than not you want to hit the screen in frustration. Sadly, there is no simple "just do it" option to get things working as you'd expect.
In addition, Qsynth loves to generate multiple midi playback devices, like 6 or more, of which only one or two from my experience actually render any sound. To help with this frustration, Cynthia has a play all midi device option (main GUI bottom right, Playback Device, select "A"). This way, if only one of six or more midi devices on Linux is capable of sound playback Cynthia will get it working. Unfortunately Qsynth and Jack can be a real pain to setup and keep working.
jjmarr•2mo ago
blaiz2025•2mo ago
Online is stating that PipeWire is now the default instead of PulseAudio or Jack. From my understanding they both sit on top of ALSA, the audio hardware driver.
So for things to go right you need: 1) Cynthia directed to playback through a working midi input device (she has a playback device range of 1-10, or "A" for all of them at once) 2) The midi input device is synthesised by FluidSynth which takes Cynthia's midi instructions and converts them into wave audio output 3) The wave audio output is directed to PipeWire/PulseAudio/Jack Audio 4) PipeWire/PulseAudio/Jack Audio ultimately direct it at your machine's hardware driver/handler, ALSA, which directs to your soundcard/sound chip and out to your speakers/headphones if all goes well.
I've read online that Jack is the pro option, which is why it was so complicated to do the basics, and PipeWire/PulseAudio are a little more user friendly?
If you switch Cynthia's Playback Device to "A" (bottom right of main GUI), she will play/broadcast her midi notes/instructions to all available midi input devices simultaneously, so if you have at least one midi input device producing sound, you should get something coming through to your speakers/headphones.
Unfortunately, I can't offer you much more help than this, as I'm not familiar with PipeWire/PulseAudio, and as far as I know FluidSynth was controlled behind the scenes (under the hood) by Qsynth's GUI.
jjmarr•2mo ago
blaiz2025•2mo ago
SergiusHN•2mo ago
https://www.blaizenterprises.com/cynthia.html#help--what-mak...
ksherlock•2mo ago
internet2000•2mo ago
karmakaze•2mo ago
pimlottc•2mo ago