Minuet in KDE Applications 16.12: code convergence, tablet UX and Windows release

Hi there,

Yesterday was the feature freeze for KDE Applications 16.12 and that's the time where you look forward for all the new awesome features will land at users devices at 15th December. As for the Minuet land, I'd like to disappointingly let you know no new features are coming but that doesn't mean things are not progressing. After some days of quite intense work ‒ trying to find some spare time between daily job, my fluffy 10 month old baby <3, and the work on the KDE e.V. board ‒ I'm right now enjoying some booze while writing these words about recent advances in Minuet.

Minuet is a quite young KDE project aimed at providing an open source platform for music education. Its first release happened in April 2016, where basic features for ear training have been released. Then ‒ as part of his Google Summer of Code 2016 project ‒ Ayush Shah worked on the port of Minuet to Android and we came up with a first Android release in October 2016. Thenceforth, in spite of our struggles to leverage reuse, two independent codebases have coexisted in an obviously not sustainable way at long-term.

Unified codebase and build system

Developing for multiple platform poses its challenges, in spite of all nice support already provided by Qt. Handling different audio backends, UX implementation for diverse form factors and localization are some of the challenges we are currently facing when making Minuet available for multiple platforms while still keeping maintenance and evolution in order. The solution is a mix of ECM (extra-cmake-modules), a flexible architecture and some QML magic for properly selecting components depending on the platform at hand. That required a lot of refactoring/merging of desktop and Android codebases and some polishing is still in progress. The unified codebase has already been pushed to Applications/16.12 branch and that was a quite important move to keep feature parity between platforms and streamline evolution.

Minuet on an Android smartphone

An important aspect of Minuet architecture is the selection of different sound controllers (new Qt plugins) depending on the platform supporting its execution. In Linux and Windows (yes, now we have a Windows build), sound synthesis is made by Fluidsynth, while CSound (which is, by the way, celebrating its 30th anniversary :O) is the back-end adopted in Android.

Tablet UX

One of the issues we had in last Minuet for Android release was its poor rendering on tablet screens. With Applications 16.12, I've done some work to properly layout UI components in different form factors and also using a fixed or collapsed navigation drawer depending on how much horizontal space is available on the screen. I'm still doing some polishing to automatically change the layouting flow for use in landscape and portrait modes. The resulting is quite nice already :)

   
Minuet running on a Android tablet

Minuet for Windows

Some weeks ago, Hannah (TheOneRing) sent me a few lines patch which made Minuet to work on Windows. To be honest, my first impression was: is that all there is? :). We were lucky of having Fluidsynth functionalities working like a charm in Windows and then it ended up being a matter of dealing with emerge and installer issues. That was my first adventure with emerge but, with the help of Hannah and Kevin Funk (thanks folks!), I'm glad to announce we'll have a Windows installer for Minuet in 16.12.

   
Minuet running on a Windows 10 box

For some reason, Windows installers generated by emerge become easily quite bloated and blacklisting files is a pain. For now, I'm following some systematic instructions to manually select the files which should go with the installer.

Minuet is totally built on top of QtQuickControls2 and different QML styles are used depending on the deployment platform. When running on Android, Minuet uses the Material style, while Windows executions are rendered with the Universal style. In Linux, Minuet currently adopts the default style for now. IIRC, there is work in progress regarding Breeze styles implementation for QtQuickControls2.

Minuet running on KDE Plasma

So, what's next? :) I'm still wondering whether I should invest some time towards Minuet builds for OS X and iOS but I guess that's likely to happen at some point, given the huge musicians userbase for those platforms. If you wanna help with that, just poke me by email or in the #kde-edu channel on Freenode, and then I'd have some more spare time to work on some new appealing features for Minuet next releases.

As usual, bug reports (in any supported platform) are quite welcome as well.

See you!