[GSoC 2013] - MuseScore in the Browser

• Apr 21, 2013 - 21:48

Contact Information

Kyle Messner
email: fritzendugan@gmail.com
irc: Fritzendugan
cell-phone: [available upon request]
Skype: [same as email] fritzendugan@gmail.com

MuseScore in the browser (EmScripten)


I will port the core "libmscore" module of MuseScore into the browser (Emscripten). I will also write an html5 application that will use this library as a proof of concept. The goal of this application will be to display and transpose an MSCZ file in the browser.

Benefits to MuseScore

In the world of web applications, many users no longer wish to download and install local applications, or they may be on a platform where that is impossible. By bringing libmscore into the browser, it opens up the possibility for html5 applications to be written which can utilize the functionality MuseScore supplies. The html5 app I will write myself at least allows for some basic functionality, but by porting the core of MuseScore, it paves the way for future browser development. In this sense, it will be of great use to end-users and developers alike.


I will first port libmscore to javascript by using Emscripten. As a side-effect of this process, an alternative build process which is friendly with cross-compiling will also be created. Once that is complete, I will begin and complete work on a proof-of-concept html5 application. Remaining time will be spent on polishing and documenting both deliverables.

Project Details

Qt has been ported to javascript already as "emscripten-qt." Emscripten-qt consists of only QtCore and QtGui, but these are the only two required for libmscore. Emscripten and Emscripten-qt are both actively developed with lots of documentation and resources. The goal is to utilize these tools to port only the libmscore module to javascript and polish this port so that it may be used to create html5 applications directly, or perhaps to pave the way later for other parts of MuseScore to be ported down the road. Part of this process will involve modifying the build process so that it will play nicely with cross-compiling (using emscripten) rather than the normal build process. The way emscripten works is by taking LLVM code (in this case it will be generated by clang) and compiling it into javascript. This is fairly straightforward for simple projects, but when projects grow and begin using libraries it gets complicated. If a project uses a library which isn't built into emscripten (libc, libc++, and SDL, and also emscripten-qt has been ported) that library itself must first be converted into (LLVM) bitcode, and then linked in the build process. This page describes that process.

The second part of the project is to then create an html5 application that uses this ported module. I will target a browser in a desktop environment (Chrome, Firefox, etc.), but I will design the application in such a way that it should not be difficult to make it work on mobile platforms, as well.

The primary focus will be on porting the libmscore library, with good documentation and polish, so that others can use the ported library for their projects.


Now until May 27th

  • Hang out in the various ircs related to my proposal
  • follow the mailing lists
  • continue fiddling with MuseScore, emscripten, emscripten-qt

May 27th until June 16th

  • Continue lurking and reading
  • Get to know my mentor
  • Become deeply famliar with the internals of libmscore

June 17th until June 23rd

  • create a build process that will work well with emscripten

June 24th until June 30th

  • Make the necessary changes to libmscore and the build process so that it will use emscripten-qt instead of normal qt.

July 1st until August 18th

  • Port libmscore to emscripten. NOTE: I will further granularize this section, outlining which specific libraries and modules musescore requires and which classes I will have compiled and working by when. I won't know more about these specifics until I become more familiar with the internals of libmscore, however.

August 19th until September 1st

  • Create HTML5 viewing application.

September 2nd until September 15th

  • Add modification functionality. First transpose, and if time permits others.

September 16th until September 23rd

  • Finish final polish on code and documentation.
  • Make sure everything is ready for final submission.


I'm a 23-year-old student attending Slippery Rock University pursuing a bachelor's degree in computer science. I spend most of my free time playing computer games, working on hobby software projects, or creating music. I'm a self-taught piano player. I like to create mostly electronic music, although I have composed some solo piano pieces. If you're interested, I release my stuff as creative-commons and you can find it on SoundCloud here (not all of it is serious work haha). I haven't used MuseScore until I found it on the GSoC organizations list, but I have worked in the past with NoteWorthy Composer, which appears to be at least somewhat similar. I'm a huge fan of open source software, and I wish I had heard of MuseScore back when I used NoteWorthy (as NoteWorthy is neither free in price nor code).

I have worked on some music/sound related projects before, which you can find on my website, although some of the stuff on there is a little dated. The most interesting project was probably a music-visualization program in Java which attempted to mimic something like the visualizers in iTunes and winamp. It worked by analyzing Frequency-domain information using a Fast-Fourier-Transform. On my website you can find some games I've created, several were for 48 hour challenges. I'm proficient with several programming languages, mostly C++, Java, and Javascript. I have some limited experience with Bash, Python, PHP, MySQL, and C#. I've dabbled in many others, as I enjoy experimenting and learning new things. I'm familiar with the Windows, Linux, Android, and iOS environments, but not so much Mac.

MuseScore is a great piece of software, and I think it has an opportunity to expand into the browser. I hope I get the opportunity to contribute to this project this summer.


Thank you so much! We got Chromebooks through our school this year, and I was prepared to try to put MuseScore into a browser, but after searching through nearly everything on the MuseScore website, I saw that you are doing the same thing! Thank you so much!!

In reply to by haripotr24

Hi Rachel!

Thank you so much for the encouragement. For my project, I'm not actually making all of MuseScore available in a browser. My goal is to get a core part of the MuseScore code, called "libmscore," converted to javascript (javascript is a programming language that web browsers, like Google Chrome, can understand). When this libmscore is converted over, basic things like showing a score file in a browser, and maybe a simple task like transposition, will be possible. Also, it will pave the way for the rest of MuseScore to possibly be converted over, too, or maybe for other types of web applications to use libmscore.

However, converting all of MuseScore into the browser has other complications, so I can't guarantee that MuseScore, in entirety, will be in a browser any time soon. Libmscore itself, though, looks to be on track for completion on schedule.

Sorry if this is confusing! Unfortunately I'm a student and only began working with MuseScore early this year, but I will try my best to answer any questions you might have :)

Do you still have an unanswered question? Please log in first to post your question.