What basic kinds of knowledge of C++ should I acquire if I'm to write a music notation software?

• Dec 15, 2018 - 09:24

First things first I should clarify that I have absolutely no means of plagiarizing your software.
It is only for my course project of C++ Programming... I have an idea to develop a simple music notation software myself, but I temporarily have no idea of what kinds of knowledge I should get in order to do that (and what probable direction I should follow).
So would you help me with it ;) Lots of thanks. (Of course, if that's secret then feel free to tell me)


Aside from learning a programming language, a bit of patience is at its place as well; especially in worldwide timezones and during the weekend ;-).

First things first; music notation is not simple. This is not at all meant as a discouragement, but just so you make sure you have a clear goal of what you want to achieve in the often limited time a course project gives you. It could be a great start-up of something to use later on though.

The most important thing to understand from a C++ perspective is how the concept of classes is used to translate a real-world model into a computer-useful model. How you can make objects interact and when to use inheritance to limit the amount of code to write.
It is always a useful architecture to separate the data model and what can be manipulated (in MuseScore sources "libmscore") from how it is displayed/interacted with (in MuseScore sources the "mscore" folder); especially in C++ where there isn't a default GUI framework available.

For MuseScore, that visualisation and interaction is done using the Qt libraries, as they provide us with cross-platform capabilities even outside of just the visualisation.
A more lightweight toolkit is SFML, which offers C++ graphical and audio capabilities among others and also claims to be cross platform. It is built on top of the lower level SDL library, for which an abundance of resources can be found as well.
If you're working on a specific version of windows only and don't care about cross-platform capabilities, then looking into MicroSoft's .Net platform is also an option.

In my experience, once visualisation starts, it's more a question of how well you know the specific libraries and their quircks than being excellent at C++ (although that of course doesn't hurt ;-) )

MuseScore is open source, so feel free to browse around and lend what you seem fit. Be aware that the people judging your end result might also know this, so for an assignment its probably not so wise to copy-and-paste core functionality if your own contribution to the end result is diminished by it.

Finally, (once more), the biggest factor of success is being able to clearly scope your project. Be clear in what you want to achieve, write it down. Doing so will help you in finding out which classes you'll want to represent the data you'll be working on.

In reply to by jeetee

Thank you for all those helpful advices :DDD (Geee it must've taken you a long time)
Just one thing I'm curious about: why did you developers choose C++ as the source language at first (and not things like C#, Basic or one of other languages which are more convenient to develop GUI-based programs)?

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