< GSoC‎ | 2017‎ | StatusReports
Revision as of 13:19, 28 August 2017 by StefanT29 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


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.

Stefant29 minuet piano before GSoC2.PNG

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.

Stefant29 minuet piano guitar.gif

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:

Stefant29 minuet chords1.gif

  • Minor7, Dominant7 and Minor Maj7 chords:

Stefant29 minuet chords2.gif

  • All intervals

Stefant29 minuet intervals.gif IRC Nick: StefanT29

IRC Channels: #KDE-edu

Telegram id: @StefanToncu

Blog: https://stefantoncu29.wordpress.com/

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:

  • Qml
  • JSON
  • Qt
  • Git

Work report

Phabricator link: https://phabricator.kde.org/p/stefant/

Phabricator tasks:

Commits done on my branch of Minuet: https://github.com/stefant29/minuet/commits/GSOC2017-Stefan


How to test and use my work within GSoC:


For a more detailed description on each stage of my work, please check my blog posts.

This page was last edited on 28 August 2017, at 13:19. Content is available under Creative Commons License SA 4.0 unless otherwise noted.