GSoC/2017/StatusReports/StefanToncu: Difference between revisions
No edit summary |
No edit summary |
||
(12 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
'''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. | '''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. | ||
''' Status: ''' | 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. | ||
[[File: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. | |||
[[File: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. | |||
''' Screenshot: ''' | ''' Screenshot: ''' | ||
*Minor and Major chords: | |||
[[File:Stefant29_minuet_chords1.gif]] | |||
*Minor7, Dominant7 and Minor Maj7 chords: | |||
[[File:Stefant29_minuet_chords2.gif]] | |||
*All intervals | |||
[[File:Stefant29_minuet_intervals.gif]] | |||
''' IRC Nick: ''' StefanT29 | ''' IRC Nick: ''' StefanT29 | ||
Line 29: | Line 51: | ||
Phabricator tasks: | Phabricator tasks: | ||
* .. | *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 [https://drive.google.com/file/d/0B2AJAeoABSR9NVNXamFKZldvUFU/view?usp=sharing 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 more detailed description on each | For a more detailed description on each stage of my work, please check my blog posts. |
Latest revision as of 13:19, 28 August 2017
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.
Screenshot:
- Minor and Major chords:
- Minor7, Dominant7 and Minor Maj7 chords:
- All intervals
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:
- 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.