Multiple-Instrument View Framework
Project Name: Multiple-Instrument View Framework
A Brief Description: Minuet is part of KDE-edu and its goal is helping teachers and students both novice and experienced teach and respectively learn and exercise their musical theory skills. It is primarily focused on ear-training exercises but other areas will soon be available.
Before the start of GSoC 2017, Minuet was using a virtual piano keyboard, displayed at the bottom of the screen (see picture below), on which users could visualize the exercises.
My task was creating a framework that would support multiple instrument-plugins to be imported and used as exercise visualization companions.
To be able to allow multiple plugins to be loaded into Minuet, i had to modify the core architecture: instead of the one and only keyboard instrument, Minuet is now providing an instrument tab bar, enabling the end user select the desired instrument. The tab bar is currently loading the instrument within the first tab as default. In order to keep all the functionalities available and a simple architecture at the same time, I’ve created an InstrumentView wrapper above all the instruments. Its methods are called by the core ExerciseView, calling in turn the methods that each instrument should implement.
After changing the Minuet’s core in order to provide a multi-instrument framework, I started refactoring the piano keyboard view as a separate plug-in. Basically, for Minuet, a plug-in is nothing more than a bunch of QML files and a simple JSON file parsed in order to learn about the QML files’ location and load them dynamically in the instrument tab bar.
Next, I created the guitar plugin from scratch: first I designed the visuals and I wrote the logic from behind and then I bound them together. The hardest part of the guitar implementation was understanding the guitar fundamentals: guitar notes, chords, intervals, which i had to implement into my plugin to be able to correctly represent the exercises previously used only by the piano.
At the end, I fixed the bugs that came up along the way, then tested the exercises for any other possible issues and finally, I wrote documentation for the plugin architecture and for the new instrument wrapper and the guitar plugin. .
Status: Project fully completed.
- Minor and Major chords:
- Minor7, Dominant7 and Minor Maj7 chords:
- All intervals
IRC Channels: #KDE-edu
Telegram id: @StefanToncu
This is awesome about GSoC: GSoC gave me the opportunity to develop myself, to firstly do research and try solving my problems on my own, while knowing at the same time that i always have someone i can ask for help if i'm stuck.
This is what I learned during GSoC:
Phabricator link: https://phabricator.kde.org/p/stefant/
- Null bug solved: https://phabricator.kde.org/D4326
- Change message text when pressing on GiveUp button: https://phabricator.kde.org/D4306
- Implementation of "Test Feature": https://phabricator.kde.org/D4466
- Implement basic rectangle plugins: https://phabricator.kde.org/D6069
- Add TabBar in a new InstrumentView.qml file: https://phabricator.kde.org/D6200
- GSoC 2017: https://phabricator.kde.org/D6315
- First Evaluation: https://phabricator.kde.org/D6406
- Change PianoView into a plugin: https://phabricator.kde.org/R163:334693f9bded7aed2073dfed3f89c4e57e6a470c
- API documentation on plugins: https://phabricator.kde.org/w/minuet/api-documentation/
- GuitarView - beta: https://phabricator.kde.org/D6503
Commits done on my branch of Minuet: https://github.com/stefant29/minuet/commits/GSOC2017-Stefan
How to test and use my work within GSoC:
- Download my work as a diff from here
- Clone a minuet repo:
- git clone https://github.com/KDE/minuet
- git apply ~/..path..to..download../Minuet_GSoC17_StefanToncu.diff
- Build Minuet following instructions on https://github.com/KDE/minuet
For a more detailed description on each stage of my work, please check my blog posts.