This post is to celebrate a few things despite the events that are clouding our feelings. ðŸ˜
Another thing to not celebrate is the slaughtering by Sourceforge of my developer web site, which they are calling "sunsetting", by October. I've already migrated it.
On the other, brighter hand, I'm celebrating this week La Mercè, which is the local festivity of Barcelona.
Castellers of Barcelona
Another event to celebrate is the first 2 million downloads of VMPK for Linux, Windows and Mac. The Sourceforge statistics do not include the installs thru Flatpak, but you may realize that more than 75% of the Sourceforge downloads are the Windows packages. The 2 mil download happened some past day of this year 2025. I've promised a celebration, and now, I have released the Android port of VMPK under the GPLv3 license in GitHub.
If you already have the F-Droid app, you only need to add the IzzyOnDroid repository in Settings>Repositories and install it today, or you may prefer to use the official F-Droid repo.
I would like to add to the celebration a video live streaming concerto, but I am too lazy and odd playing for that. Better use this wonderful rendering of the Tchaikovsky Violin concerto by TwoSet Violin, with Brett Yang playing the soloist and Eddy Chen the rest of the orchestra. Enjoy!
It's hot weather these days here at Barcelona! It is also time for releases...
A new synthesizer library has been released on July 28, 2022: Sonivox. This project is a fork of the Android Open Source Project 'platform_external_sonivox', including a CMake based build system to be used not on Android, but on any other computer Operating System. Google licensed this work originally named Sonivox EAS (Embedded Audio Synthesis) from the company Sonic Network Inc. under the terms of the Apache License 2.0.
This is a Wave Table synthesizer, not using external soundfont files but embedded samples instead. It is also a real time GM synthesizer. It consumes very little resources, so it may be indicated in projects for small embedded devices. There is neither MIDI input nor Audio output facilities included in the library. You need to provide your own input/output.
Until now, the "eassynth" Drumstick::RT backend included the sonivox library sources, compiled and statically linked. Now, the build system search for an external sonivox library like any other dependency, and dynamically links the shared library when found.
I prefer to have all the code in a single place, avoiding duplication. But it is not only my personal convenience, Linux users would have a single copy of the library installed in their systems, which will be easier to patch or replace by the distribution vendors when needed. Of course this would be not possible if their only choice is to install the applications as an AppImage, or a Flatpak.
The other release today July 31, 2022 is Drumstick 2.7.0
A brief summary of changes for this release:
ticket #44: removed sonivox library sources from the source tree. The Sonivox library is an external dependency.
ticket #43: Drumstick::RT dummy plugins now include its own configuration dialogs.
ticket #42: Drumstick::Widgets - fixed piano designer plugin to show more properties.
ticket #41 Drumstick::Widgets: Option to use subscript octave designation.
Drumstick::ALSA registering SequencerEvent with qMetaType.
Drumstick::RT FluidSynth plugin updated with changes in fluidsynth 2.2.8
Utils: vpiano uses the subscript octave designation option.
Compilation minimum requirements for all platforms:
C++11 compiler
CMake 3.14
Qt5 >= 5.9 or Qt6 >= 6.2 (with Qt6Core5Compat library dependency for Drumstick::File)
It has been a while! First of all:
thank you very much for the million downloads of VMPK! It happened in
2016, but I wasn't paying attention at the time. I didn't post any
article around that event, neither released a new VMPK version since
that year, so let's cover both things.
Born in 2008, this project is
multiplatform from the beginning, with the goal of emulating a MIDI
controller device on software; which means: producing (and consuming)
MIDI events. The producing part requires another source of human
triggered events: computer keyboard, mouse and touch screen events
are supported and available on the three main target operating
systems. But producing MIDI events without delivering them to a MIDI
Synthesizer makes the program useless, with no sound output at all. This has been the experience of most new VMPK
Linux users for years. Windows users have a software synth included
in the operating system, installed and ready to use, so they may
produce sound as soon as they install VMPK from scratch. But Mac and
Linux users need to find and install first a suitable synthesizer.
Mac OSX also includes a soft synth library, but it is not a
ready-to-use service and needs to be activated by a third party
software. It's not very hard to find and install, because Apple has
always made MIDI users a niche for their products. Good for them.
I've been approached last year
by Microsoft people to package and publish VMPK into their Windows
Store for Windows 10. Probably the million downloads has something to
do with it. I've tried the packaging part without technical problems
thanks to the support of the MS Desktop Bridge team, but the store
conditions were awful, arbitrary and unfair, so I am not willing to
comply with them. This means that VMPK will be available only outside
the Windows Store and there won't be an UWP or Windows Phone version
either in the future. I don't want to speak about the Apple's App
Store. To the hell with them as well.
Linux users have been often made
hostages of their distributions and packagers. In theory, the package
repositories of each distribution (equivalent to an app store) are
made for easy discovery and install of all the software available for
Linux, but this is not true in practice. Software integration from
different unrelated sources is also the job of the Linux
distributions, which they miserably fail as well. I mean that when
saying hostages, because the packagers sometimes act as if they want
to force their users to follow their own personal preferences, like
the gurus of a sect: Jack is the chosen one!!! PulseAudio is evil!!!
More about that later. Let's listen an
enlightening Linus Torvalds first:
OK Linus. I've released this time an
AppImage package for 64-bit Linux. OTOH, I'm still using Subversion
and not planning to migrate the source repository to Git anytime
soon.
What I think it would be a good
VMPK distribution? Well, first of all, the latest version should be
available for install, optionally with some former versions available
to choose if the users needs to compare something (like a bug
resolved or introduced in the latest version). Second: main functions
should be immediately available: the user must be able to simply get
sound at once. For Linux, ALSA sequencer inputs and outputs must also
be available without any other extra configuration. About network
I/O: the Mac OSX and Windows operating systems automatically activate firewalls blocking this function but, as soon as VMPK
starts the first time, the OS asks the user for permission to open
the firewall for this software. Linux distributions that include an
active firewall should listen and learn something here.
The latest VMPK release includes
lightweight soft synths for Linux and Mac OSX, which were available
as a Drumstick-RT library back-ends for some time. The Linux soft
synth is Sonivox EAS, borrowed from Android OSP and ported to Linux +
PulseAudio, which was already mentioned in another post.
It is the default output chosen by VMPK
upon install, so you need to use PulseAudio if you want to try VMPK.
Why the PulseAudio choice? Because it is the default Linux sound
server in most distributions: Ubuntu, Fedora (Red Hat), OpenSUSE,
etc. I know that there has been a lot of criticism among the Linux
audio community about PA, but honestly: I can't care less about
arguments that sound like fanaticism. Someone told me that: “many
people in linux-audio avoid PA like the plague.” Well, I'm sure
you know that many computer users avoid Linux like a plague, but I
don't let a handful of haters to influence my decision of keeping
VMPK available for Linux users. And at the end of the day, this is my
personal project and I am who decide the road-map. This is also free
software. If you don't like something or have good ideas to get it
better, you may contribute with code or make your own fork.
Android is an operating system developed by Google around the Linux kernel. It is not like any other Linux distribution, because not only many common subsystems have been replaced by other components, but also the user interface is radically different based on Java language running into a virtual machine called Dalvik.
An example of subsystem removed from the Linux kernel is the ALSA Sequencer, which is a key piece for MIDI input/output with routing and scheduling that makes Linux comparable in capabilities to Mac OSX for musical applications (for musicians, not whistlers) and years ahead of Microsoft Windows in terms of infrastructure. Android did not offer anything comparable until Android 6 (Marshmallow).
Another subsystem from userspace Linux not included in Android is PulseAudio. Instead, OpenSL ES that can be found on Android for digital audio output and input.
But Android also has some shining components. One of them is Sonivox EAS (originally created by Sonic Network, Inc.) released under the Apache 2 license, and the MIDI Synthesizer used by my VMPK for Android application to produce noise. Funnily enough, it provided some legal fuel to Oracle in its battle against Google, because of some Java binding sources that were included in the AOSP repositories. It is not particularly outstanding in terms of audio quality, but has the ability of providing real time wavetable GM synthesis without using external soundfont files, and consumes very little resources so it may be indicated for Linux projects on small embedded devices. Let's take it to Linux, then!
So the plan is: for the next Drumstick release, there will be a Drumstick-RT backend using Sonivox EAS. The audio output part is yet undecided, but for Linux will probably be PulseAudio. In the same spirit, for Mac OSX there will be a backend leveraging the internal Apple DLS synth. These backends will be available in addition to the current FluidSynth one, which provides very good quality, but uses expensive floating point DSP calculations and requires external soundfont files.
A lot of time since the last post. Let me announce a new port of VMPK, for Android (4.x) devices. It is available in Google Play.
There are two apps, a paid version (0.5€) and a free one (gratis) with a small advertisement. It is not based on Qt, and it is not open source. It is a Java port rewritten
from scratch using the native Android MIDI synthesizer and native
Android themes. But on the other hand, is quite similar to the old N9
port, as you can see in the following screenshots, but with several additional features.
Being mostly a Java app, it includes some C code. The internal MIDI synthesizer is Android's "Sonivox EAS", which is part of AOS. The library is included in all recent Android versions, but it is not a public API, so I've compiled the library with a customized configuration and different features resulting a smaller binary and included it in the APK along with some other native code, mainly opensl_stream by Peter Brinkmann for interfacing the synth with Android's OpenSL ES audio output. An interesting aspect of the synth is the embedded GM soundfont using very small amount of memory, and not needing external data files.
Some features are: ipMIDI compatibility (MIDI OUT only) using UDP multicast and Wireless network. Accelerometer driven sliders for velocity, controllers and bender (like the N9 port), configurable number of keys and initial key, among other goodies.