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" | 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 | 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 | 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. | 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 | 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 | 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 | 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 | 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. | 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. | 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.
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 |
| |
Week 2 |
| |
Week 3 |
| |
Week 4 |
| |
Week 5 |
| |
Week 6 |
| |
Week 7 |
| |
Week 8 |
| |
Week 9 |
| |
Week 10 |
OR
| |
Week 11 |
OR
| |
Week 12 |
|
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.