Published using Google Docs
Hirnaymay_MuseScore_Proposal_for_gsoc_final
Updated automatically every 5 minutes

Hirnaymay Bhaskar                                                               E-mail | LinkedIn | GitHub | octopols#6051| musescore.org

Links to evidence

I would like to share some of the pull requests that I have recently submitted to MuseScore. These requests include various improvements and bug fixes that aim to enhance the functionality and user experience of the software.

MuseScore Pull Requests

S.no

Issue

Pull Request

Date Created

Description

PR Status

1

#15684 [MU4 Issue] Horizontal frame - Properties - "Display key, brackets and braces" should also mention "clef"

#16008

Jan 22, 2023

Changed the string "Display key, brackets and braces". The revised string is: "Display brackets, clefs, and key signatures in the next measure."

Merged

2

#12673 [MU4 Issue] [UI Finesse] On wide screens, the text in Learn > Classes is too wide to be comfortably readable

#16087

Jan 27, 2023

Added a scrollbar to Learn > Classes, which now allows users to scroll to the link to “Mastering MuseScore” when the card is bigger than the screen. The text now extends to the right end of the text space.

Open

3

#16125 [MU4 Issue] [Workspaces] UI glitch in workspaces window when adding too much workspaces

#16154

Jan 31, 2023

Resolved an issue where the Workspaces window would glitch and overlap with its header and footer of the workspaces window when more than nine workspaces were added. Additionally, fixed an error where the Workspaces dialog did not scroll to the selected workspace when opened.

Merged

4

#14338 [MU4 Issue] Missclicking while selecting several things, although still holding control shouldn't remove all the selections.

#16190

Feb 2, 2023

Resolved an issue where clicking on an empty area of the canvas would clear the user's selection when multiple items were selected while holding the control key. This was accomplished by moving the conditional statement that clears the selection inside another conditional statement that checks if the control key is not pressed.

Open

5

#13652 [MU4 Issue] Regression: opacity control missing in color picker

#16201

Feb 3, 2023

Added an opacity control to the color selection dialog for framed text blocks. When the color dialog is opened and the current color has an alpha value of 0, the alpha value is automatically set to 255. Additionally, a showAlpha property has been added to the colorPickerModel, which provides an option for alpha control.

Open

6

#16219 [MU4 Issue] Customize note input toolbar popup points to empty space

#16226

Feb 6, 2023

I’m still working on this issue. The current solution is not viable.

The new pop-up system will include an option to open the pop-up window to the left or right, with the corresponding arrow direction indicating the current state of the pop-up. This feature will be activated on demand when the user interacts with the pop-up.

Open

7

#16141 [MU4 Issue] [Inspector] Text line spacing is missing in Properties

#16322

Feb 13, 2023

Added a line spacing option to the text in the application and implemented it using a spinbox. This feature allows the user to adjust the spacing between lines of text.

Merged

8

#12772 [MU4 Issue] PNG Export dialog - Resolution - unable to enter more than 3 digits

#16525

Feb 24, 2023

Changed the regular expression controlling the integer input in spinboxes.

Open

9

#16555 [MU4 Task] Font dropdown menu should display what a font looks like.

#16827

Mar 15, 2023

Font dropdowns now have an additional property `isFontDropDown` which is used to convey if a dropdown is showing system fonts and if it does then the font dropdown shows what every font looks like.
Excluded fonts which only contain symbols to use their font in the dropdown, default font is used to display their name.

Open

Here is a link to all my pull requests to MuseScore on github (Link) .

Bio

My name is Hirnaymay Bhaskar, and I am a third year student currently pursuing B.Tech in Computer Science and Engineering at Ajay Kumar Garg Engineering College in NCR of India, Ghaziabad. As a computer science enthusiast, I am deeply passionate about expanding my knowledge in various areas of the field, such as software development and computer architecture. Exploring new concepts and technologies in these domains not only satisfies my intellectual curiosity but also fuels my drive to pursue a career in this exciting and dynamic industry.

While browsing through the GSOC organizations, I discovered MuseScore and was immediately drawn to it due to its well-labeled repository and well-maintained documentation, which made it easy for me to start contributing. Despite my initial fear of contributing to an open-source repository, the MuseScore community was incredibly supportive from the beginning, guiding me through the code structure and the use of Git and GitHub.

Throughout my time contributing to MuseScore, I have always tried to give my best and give back to the community, whether by contributing to the codebase or helping new developers on Discord. In the past two months, I have focused on issues that directly impact the users, including various UI fixes for example the Learn page and workspaces UI, restoring lost features of MuseScore 3 to 4 like the addition of opacity control and line spacing back to MuseScore 4, and enhancing existing features such as the selection system and font dropdown.

Working with MuseScore has not only taught me valuable technical skills such as software development and the use of technologies like QT and Qml, but also how the software development process works. Additionally, I have gained experience with more advanced Git and GitHub features.

 

Prior to contributing to MuseScore, I had worked extensively on Android development, with a particular focus on UI-related issues. I found that the process of developing an Android application's layout using XML was quite similar to using QML, which helped me transition to solving issues in MuseScore with relative ease.

During my time exploring Android development, I created an application called Wallionary, which aimed to expand users' vocabulary by providing them with a new wallpaper featuring a new word each day. While I am no longer actively developing Wallionary, it was an important project for me that allowed me to hone my skills in software development and learn new technologies, including Android Studio with Kotlin and Firebase integration.

Aside from my work in software development, I also have a passion for music. In fact, it was my love of music that first drew me to MuseScore even though I don’t know a lot about music scores and sheet music. I have been playing guitar for around 5-6 years now and have a basic understanding of music theory, particularly as it relates to guitar, including scales and chord formations.

My interest in guitar was sparked by Ed Sheeran who I followed since his first album, his live music inspired me to start playing. Although I don't typically play guitar in public settings, it's a deeply personal hobby for me. In fact, I've spent countless hours creating new music on my guitar and have even composed a few songs over the years.

Floating Text Widget / UI improvements

About the Project

Synopsis

The goal is to create a compact widget that will appear above selected text on a score and will encompass all the available options present in the Properties panel related to text selected. The inspiration for this widget stems from similar widgets utilized in word processing applications.

Fig. Floating Text Widget concept (source)

The primary objective of this widget is to offer quick access to commonly used text editing options, including font style, size, color, and alignment. As a result, users can easily access these options, saving them valuable time when editing text on a score.

Possible extensions for this widget include additional features such as spell-checking, automatic hyphenation, and verse extraction. These additional features would further enhance the user experience and increase productivity when editing text on a score.

Size and Duration

Size: large (~350 hours). Duration: standard 12 weeks (estimate)

The project is substantial and estimated to require approximately 350 hours of work, to be completed within a 12-week timeframe. The project involves close collaboration with the design and testing teams. The main objective of the project is to implement a pop-up control for all existing text properties that will be displayed when text is selected. In addition to this, the project may include the implementation of new text features such as spell-checking, automatic hyphenation, and verse extraction.

Benefits to MuseScore

This project will enhance the user experience of MuseScore by providing a convenient and efficient way to customize text in scores. With the potential addition of spell-checking, automatic hyphenation, and verse extraction features, this tool will further improve the customization capabilities of MuseScore. I look forward to seeing the positive impact this project will have on MuseScore users.

Deliverables
The objective of this project is to create a pop-up feature that can be accessed by selecting a section of text. This pop-up will act as a framework for various text-related features that are currently in MuseScore, such as basic text properties like font, font color, font size, line spacing, and text spacing, as well as text-related features that will be added to MuseScore in the future.

Furthermore, the project aims to establish the groundwork for additional features, such as spell-checking, automatic hyphenation, and verse extraction. I aim to have at least one of these features fully developed and operational by the end of the program.

Beyond GSoC, the end goal of the project is to include all text-related features appropriate for the pop-up and to have a fully functioning spell-checking, automatic hyphenation, and verse extraction system.

Schedule

I plan to focus solely on this project throughout the Google Summer of Code program. The schedule for the project is preliminary and  may be subject to adjustments as necessary. I understand the importance of meeting project deadlines and am committed to prioritizing this project to ensure its success.

The timeline has been divided into five major distinct phases, though each of these phases are allotted some weeks, there might be some overlap considering non-sequential efforts as and when needed.

Here is the rough timeline on how I would complete this project.

Phases

Week

Tasks

Week 1

  • Launch an empty pop-up when some text is selected.

Week 2

  • Ensure that the pop-up opens as intended, and fix any cases where it fails to open.
  • Work with the design team to implement the UI for the pop-up.

Week 3

  • Continue working on last week’s tasks.
  • Link existing text properties to the pop-up's interface.
  • Test the text property pop-up for various cases.

Week 4

  • Continue working on last week’s task.
  • Test the text properties pop-up's functionality and make changes as required.
  • Ensure that the text properties pop-up is viable for Phase 1 evaluation.

Week 5

  • Link the Hunspell libraries required for spell-checking to MuseScore.
  • Work on a spell-checking pop-up that should be launched when a word is left-clicked.

Week 6

  • Work on labeling and underlining words that are wrongly spelled.
  • Add suggestions to the left-click pop-up.
  • Make the left-click pop-up only launch when a wrongly spelled word is clicked.
  • Submit text properties pop-up for Phase 1 evaluation.

Week 7

  • Modify the current right-click menu to contain a spelling suggestion field.
  • Test the spell-checking functionality and make changes as required.

Week 8

  • Use Hunspell to automatically hyphenate words.
  • Underline the words that are automatically hyphenated.

Week 9

  • Work on a pop-up that shows the original text that got hyphenated when a word that got automatically hyphenated is left-clicked.
  • Test automatic hyphenation and make the changes as required.

Week 10

  • Start working on verse extraction by working out what needs to be done and how.
  • Work on the regular expression that will be used to divide the lyrics into verses.

OR

  • Buffer week. If things are behind schedule I’ll try to sync with the timeline and if I’ve already finished the tasks on time I’ll try to get ahead of the schedule.

Week 11

  • Add a verse extraction option to a text field's right-click menu.
  • Work on the system that creates new text layouts for the extracted verses.
  • Test the working of verse extraction and make required changes.

OR

  • Continue working on Spell-Check and Automatic Hyphenation as it can be more complex than expected

Week 12

  • Test and make changes required for text properties pop-up, spell-checking and automatic hyphenation systems, and verse extraction (if applicable).
  • Final testing and implementation of required changes.
  • Ensure that the project is ready for Phase 2 evaluation.

Implementation

Text Property Pop-Up

First I will start by working on how and when the pop-up will launch for the text properties, when I feel confident about the working of the pop-up  I’ll start transitioning to the structure and UI of the pop-up. I’ll create a new UI component for the pop-up. I'll use the predefined components of MuseScore and QML to first get the structure of the pop-up done and then I'll start linking the text properties to their respective control component on the pop-up. Alternatively, I can work on the structure and linking process at the same time.

Spell-Check

For spell-check, I'll be using the Hunspell library, which is a popular open source spell-checker and is also a popular hyphenation library. It supports multiple & complex languages and is easy to integrate into MuseScore. QtSpellChecker is also a viable option but Hunspell is a more mature and widely used spell-checking library as per my research & understanding. It has been used in many popular applications such as OpenOffice, Firefox, and LibreOffice.

Automatic Hyphenation

As I mentioned above, Hunspell is a widely used open source spell-checker and hyphenation library. In this project, Hunspell will be utilized to detect words requiring hyphenation. Additionally, a labeling and underlining system will be implemented to identify words that were automatically hyphenated.

Verse Extraction

To add verse extraction in MuseScore, I will first need to locate the section of code where the lyrics are parsed and displayed. Then, I will need to implement an algorithm that can detect verse changes based on the presence of certain keywords, such as "Chorus" or "Verse". This algorithm can be implemented using regular expressions and other string manipulation techniques.

Once the verse changes are detected, I can use the Qt text layout system to create separate text boxes for each verse. This will involve calculating the position of each line of text and separating the lyrics into their respective verses. Additionally, I can add options in the user interface to enable/disable the verse extraction feature and to customize the keywords used to detect verse changes.

While I was working on MuseScore issues these last 2 months, I've learned many new things like Qt, QML and the structure of MuseScore's codebase itself, and I still have ample skills to learn. These newly learned skills give me confidence to envision the start of the project and  with the help of the mentor I feel confident in completing the project with flying colors.

Conclusion

In conclusion, the Floating Text Widget project is a substantial undertaking that has the potential to greatly enhance the user experience of MuseScore. With its compact design and quick access to commonly used text editing options, this widget will save users valuable time when editing text on a score. Additionally, the possible extensions of spell-checking, automatic hyphenation, and verse extraction will further increase productivity and customization capabilities within MuseScore.

I am confident in my ability to successfully complete this project within the allotted 12-week timeframe, while collaborating closely with the design and testing teams. My contributions to MuseScore over the past 2 months, particularly in addressing issues related to this project such as #16141 and #16219 where I added line spacing back to MuseScore 4 and worked on a pop-up related issue, demonstrating my aptitude for the task at hand, convinces me that I will be able to finish this project.

I am eager to contribute to the improvement of MuseScore's text related capabilities and to positively impact its user community. I have devised a well-planned timeline to efficiently manage the project and ensure timely completion within the given timeframe. I am committed to delivering a functioning pop-up feature and establishing the groundwork for additional features such as spell-checking, automatic hyphenation, and verse extraction. Working on this project will help me work towards my goal of becoming a software developer in the future. I feel my passion for the project and my technical expertise make me the ideal candidate for this endeavor.