Jump to content

GSoC/2018/StatusReports/AmanKumarGupta: Difference between revisions

From KDE Community Wiki
 
(31 intermediate revisions by the same user not shown)
Line 1: Line 1:
==GCompris: Port all GTK+ piano activities to Qt and get one step closer to version 1.0==
==Port the package of all GTK+ piano activities to Qt==


GCompris is an educational software suite comprising of numerous activities for children aged 2 to 10. Originally written in Gtk+ its development team started to rewrite it from scratch in Qt Quick. My aim is to port all the piano-based musical activities which are one of the most important activities that we are missing to have a complete 1.0.
GCompris is an educational software suite comprising of numerous activities. Originally written in Gtk+ its development team started to rewrite it from scratch in Qt Quick. My aim is to port all the piano-based musical activities which are one of the most important activities that we are missing to have a complete 1.0.


'''Mentors:''' Divyam Madaan and Emmanuel Charruau
'''Mentors:''' Divyam Madaan and Emmanuel Charruau
Line 8: Line 8:


* Finish the port of Piano composition activity and add more features.
* Finish the port of Piano composition activity and add more features.
* Porting of GTK+ Play piano activity from scratch to QtQuick.
* Port GTK+ Play piano activity from scratch to QtQuick.
* Re-design and implement Note names activity.
* Develop the activity Note names from scratch in Qt.
* Porting of GTK+ Play rhythm activity from scratch to Qt.
* Port GTK+ Play rhythm activity from scratch to Qt.
* Build GCCreationHandler, a tool which is to be used to import/export and manage user creation files of various formats and integrate it with configurable activities.


==Work Report==
==Work Report==


===Community Bonding Period===
===1. Piano Composition===


During the community bonding period, I've been in constant touch and communication with my mentors, discussing various aspects of implementing the activities. We had to change the plan of the activity Note names than the one I had planned in the proposal as we explored better ways and pedagogic interests which would be more helpful in remembering the notes.
===='''Introduction:'''====
Also I extended a new branch from the HEAD of master and rebased the previous branch on top of it to continue my works during GSoC in it.
Further I've been working with KDE since the past one year and have also participated in the Season of KDE this year and sucessfully my project, thus I'm well practiced with building the project, working with branches, docementations and code-base and it all went pretty good for me during the Community bonding period.
 
===Coding Period - Phase one (May 14th to June 12th)===
----
====Piano Composition====
 
====='''Introduction:'''=====


This activity teaches the users how to compose melodies with piano by offering them certain components like notes, rests and many features like erase, replace, undo etc.
This activity teaches the users how to compose melodies with piano by offering them certain components like notes, rests and many features like erase, replace, undo etc.


====='''Implementation:'''=====
===='''Implementation:'''====


1. Improved melody loader window UI.
1. Improved melody loader window UI.
Line 41: Line 32:
5. Added rests.
5. Added rests.


6. Added replace and erase toggable features.
6. Added replace and erase features.


7. Added undo feature.
7. Added undo feature.
Line 49: Line 40:
9. Added feature to display lyrics and other details of the music loaded.
9. Added feature to display lyrics and other details of the music loaded.


10. Automated playing of piano when a melody is started.
10. Made note-type options toggable.
 
11. Added more octaves for treble (E3 to F6) and bass clefs (C3 to F4).
 
12. Created new SVG images with ledger lines.
 
13. Made a common API for all the types of elements on the staff.


11. Made note-type options toggable.
14. Added feature to add multiple clefs on the same staff.


12. Added more octaves for treble and bass clefs.
15. Implemented BPM meter which would default to  60 BPM and the user can increase/decrease the rhythm of the song.


13. Created new SVG images with ledger lines.
16. Piano_composition API is used by all other activities which make the code non-redundant, easily manageable, maintainable, modifiable.


14. Did code cleanup and refactorizations.
17. Did code cleanup and refactorizations.


====='''Status:'''=====
===='''Status:'''====


The activity is currently under testing and review.
The activity is not yet complete because of the need to integrate an audio synthesizer and incompletion of GCCreationHandler (not yet started) as not much time is left in the end.
However, the community agreed that the audio synthesizer integration is out of the scope of GSoC as they did not foresee it and is planning to work on a synthesizer after GSoC.


====='''Screenshots:'''=====
===='''Screenshots:'''====


[[File:Loader_window.png]]
[[File:Loader_window.png]]
''Music Loader window''
''Music Loader window''


[[File:Piano.png]]
[[File:MusicMode.png]]
''Melody composed with piano''
''Melody composed with piano''


[[File:Lyrics2.png]]
[[File:Lyrics new.png ]]
''Lyrics for the music loaded''
"Lyrics for the loaded music"


----
----


====Play piano====
===2. Play piano===


====='''Introduction:'''=====
===='''Introduction:'''====


This activity aims to let the user understand how the piano keyboard can play rythm as written on the musical staff by replicating the ones that are presented.
This activity aims to let the user understand how the piano keyboard can play rhythm as written on the musical staff by replicating the ones that are presented.


====='''Implementation:'''=====
===='''Implementation:'''====


1. Added resources from the Gtk+ version.
1. Added resources from the Gtk+ version.
Line 94: Line 92:
5. Added configuration for two modes: colored notes and colorless notes.
5. Added configuration for two modes: colored notes and colorless notes.


5. Code refactorization.
6. Added undo feature to revert the attempt.
 
7. Added keyboard bindings.


====='''Status:'''=====
8. Code refactorization.


The activity is currently under review.
===='''Status:'''====


====='''Screenshots:'''=====
The activity is complete and is currently under review.


[[File:IAmReady.png]]
===='''Screenshots:'''====


[[File:Notes_colored.png]]
[[File:ReadyScreen.png]]
''Levels with colored notes to replicate the rhythm''
''Screen for the user to begin practice''


[[FIle:Notes_colorless.png]]
[[File:Colored.png]]
''Levels with colorless notes to replicate the rhythm''
''Levels with colored notes''
 
[[File:Colorless.png]]
''Levels with colorless notes''


[[File:Mode.png]]
[[File:Mode.png]]
''Configuration window for the two modes''
''Configuration window for the two modes''


==Branch where I'm working==
----
 
===3. Note Names===
 
===='''Introduction:'''====
 
This activity aims to teach sight reading the notes in music and their position on the staff by presenting several notes one-by-one with animation from the right of the staff sliding to the right of the clef image. The user will get the combination of all the notes he has learned previously and the current targetted notes from the dataset. Only the reference notes are colored as red and the user is made to learn the notes around it. One has to correct enough notes to get a 100% and advance to next stage.
 
===='''Implementation:'''====
 
1. Laid down UI of the activity.
 
2. Added levels dataset.
 
3. Added animation for the notes.
 
4. Added tutorial mode for the activity.
 
5. Implemented working logic of the activity.
 
6. Added reference keys coloring feature.
 
7. Implemented dual octave keyboard.
 
8. Added keyboard bindings.
 
9. Code refactorization.
 
===='''Status:'''====
 
The activity is complete and is currently under review.
 
===='''Screenshots:'''====
 
[[File:NoteNamesTutorial.png]]
''Tutorial mode''
 
[[File:Game.png]]
''Learning mode''
 
----
 
===4. Play Rhythm===
 
===='''Introduction:'''====
 
This activity aims to let the user practice the accuracy of his rhythm by playing the presented rhythm at correct times by following the red Pulse marker line and estimating the time through the dynamic metronome.
 
===='''Implementation:'''====
 
1. Laid down UI of the activity.
 
2. Added levels dataset.
 
3. Added pulse marker and its animation.
 
4. Implemented dynamic metronome.
 
5. Implemented working logic of the activity.
 
6. Added an element AdvancedTimer with the feature to enable pause/resume which lacks in the QtQuick's Timer element.
 
===='''Status:'''====
 
The activity is complete and is currently under review.
 
===='''Screenshots:'''====
 
[[File:PulseMarker.png]]
''A level with Pulse marker''
 
[[File:Metronome.png]]
''A level with metronome''
 
==Links to code==


Since all the activities will be built upon a common API and need to be sharing lots of code, I'll be carrying all my works in the branch:
The following are the links to all my work:


* [https://cgit.kde.org/gcompris.git/log/?h=gsoc_aman_piano_activities Piano activities]
* [https://phabricator.kde.org/D14727 Piano_composition]
* [https://phabricator.kde.org/D14712 Play_piano]
* [https://phabricator.kde.org/D14653 Note_names]
* [https://phabricator.kde.org/D14713 Play_rhythm]


==Important Links==
==Blog post links==


* [https://amankumargupta.wordpress.com/2018/08/11/gsoc-2018-final-week/ GSoC 2018: Final week]
* [https://amankumargupta.wordpress.com/2018/07/28/gsoc-2018-weeks-8-9-10/ GSoC 2018: Weeks 8, 9 and 10]
* [https://amankumargupta.wordpress.com/2018/07/06/gsoc-2018-week-6-and-7/ GSoC 2018: Week 6 and 7]
* [https://amankumargupta.wordpress.com/2018/06/18/gsoc-2018-week-4-5/ GSoC 2018: Week 4 and 5]
* [https://amankumargupta.wordpress.com/2018/06/04/gsoc-week-2-3/ GSoC 2018: Week 2 and 3]
* [https://amankumargupta.wordpress.com/2018/06/04/gsoc-week-2-3/ GSoC 2018: Week 2 and 3]
* [https://amankumargupta.wordpress.com/2018/05/22/gsoc-2018-week-1-with-kde/ GSoC 2018: Week 1]
* [https://amankumargupta.wordpress.com/2018/05/22/gsoc-2018-week-1-with-kde/ GSoC 2018: Week 1]
Line 130: Line 214:


IRC: gupta2140[m]
IRC: gupta2140[m] on Freenode


Github: gupta2140
Channels: #gsoc, #kde-soc, #kde-in, #gcompris

Latest revision as of 14:58, 11 August 2018

Port the package of all GTK+ piano activities to Qt

GCompris is an educational software suite comprising of numerous activities. Originally written in Gtk+ its development team started to rewrite it from scratch in Qt Quick. My aim is to port all the piano-based musical activities which are one of the most important activities that we are missing to have a complete 1.0.

Mentors: Divyam Madaan and Emmanuel Charruau

Project Goals

  • Finish the port of Piano composition activity and add more features.
  • Port GTK+ Play piano activity from scratch to QtQuick.
  • Develop the activity Note names from scratch in Qt.
  • Port GTK+ Play rhythm activity from scratch to Qt.

Work Report

1. Piano Composition

Introduction:

This activity teaches the users how to compose melodies with piano by offering them certain components like notes, rests and many features like erase, replace, undo etc.

Implementation:

1. Improved melody loader window UI.

2. Made multiple staff view flickable and add more staffs when needed.

3. Reworked the code base according to IPN Notation.

4. Added contexts for translators.

5. Added rests.

6. Added replace and erase features.

7. Added undo feature.

8. Separated Note data from the Staff view.

9. Added feature to display lyrics and other details of the music loaded.

10. Made note-type options toggable.

11. Added more octaves for treble (E3 to F6) and bass clefs (C3 to F4).

12. Created new SVG images with ledger lines.

13. Made a common API for all the types of elements on the staff.

14. Added feature to add multiple clefs on the same staff.

15. Implemented BPM meter which would default to 60 BPM and the user can increase/decrease the rhythm of the song.

16. Piano_composition API is used by all other activities which make the code non-redundant, easily manageable, maintainable, modifiable.

17. Did code cleanup and refactorizations.

Status:

The activity is not yet complete because of the need to integrate an audio synthesizer and incompletion of GCCreationHandler (not yet started) as not much time is left in the end. However, the community agreed that the audio synthesizer integration is out of the scope of GSoC as they did not foresee it and is planning to work on a synthesizer after GSoC.

Screenshots:

Music Loader window

Melody composed with piano

"Lyrics for the loaded music"


2. Play piano

Introduction:

This activity aims to let the user understand how the piano keyboard can play rhythm as written on the musical staff by replicating the ones that are presented.

Implementation:

1. Added resources from the Gtk+ version.

2. Laid down UI of the activity.

3. Added levels dataset.

4. Implemented working logic of the activity.

5. Added configuration for two modes: colored notes and colorless notes.

6. Added undo feature to revert the attempt.

7. Added keyboard bindings.

8. Code refactorization.

Status:

The activity is complete and is currently under review.

Screenshots:

Screen for the user to begin practice

Levels with colored notes

Levels with colorless notes

Configuration window for the two modes


3. Note Names

Introduction:

This activity aims to teach sight reading the notes in music and their position on the staff by presenting several notes one-by-one with animation from the right of the staff sliding to the right of the clef image. The user will get the combination of all the notes he has learned previously and the current targetted notes from the dataset. Only the reference notes are colored as red and the user is made to learn the notes around it. One has to correct enough notes to get a 100% and advance to next stage.

Implementation:

1. Laid down UI of the activity.

2. Added levels dataset.

3. Added animation for the notes.

4. Added tutorial mode for the activity.

5. Implemented working logic of the activity.

6. Added reference keys coloring feature.

7. Implemented dual octave keyboard.

8. Added keyboard bindings.

9. Code refactorization.

Status:

The activity is complete and is currently under review.

Screenshots:

Tutorial mode

Learning mode


4. Play Rhythm

Introduction:

This activity aims to let the user practice the accuracy of his rhythm by playing the presented rhythm at correct times by following the red Pulse marker line and estimating the time through the dynamic metronome.

Implementation:

1. Laid down UI of the activity.

2. Added levels dataset.

3. Added pulse marker and its animation.

4. Implemented dynamic metronome.

5. Implemented working logic of the activity.

6. Added an element AdvancedTimer with the feature to enable pause/resume which lacks in the QtQuick's Timer element.

Status:

The activity is complete and is currently under review.

Screenshots:

A level with Pulse marker

A level with metronome

Links to code

The following are the links to all my work:

Blog post links

Contact

Email: [email protected]

IRC: gupta2140[m] on Freenode

Channels: #gsoc, #kde-soc, #kde-in, #gcompris