There are two ways of creating the score: The Score contains all musical symbols that are to be drawn. Some classes from can be treated as a lower level of abstraction from Manufaktura.Music classes, for example Pitch can be promoted to Note, Note can be reduced to Pitch, etc. In the large extent, the model is based on MusicXml specification but it also utilizes the concepts from Manufaktura.Music library, for example, Note consists of Pitch and RhythmicDuration. Model contains classes that represent different western music notation concepts such as notes, rests, clefs, barlines, etc. It defines model, parsers (for parsing MusicXml), renderers and render strategies. Manufaktura.Controls is the largest library in the solution. All these classes are more or less used in low-abstraction models in Manufaktura.Controls. There are also other classes as RhythmicDurations and Scales. Example: Proportion.Sesquialtera returns a fraction of 3/2. Proportions are just fractions that can be converted to double or cents. Represents interval that starts from a certain pitch – concept similar to hooked vector.
Defines number of steps and number of halftones.
Previously, they functioned as portable class libraries, currently they target. NET environments: web, desktop and mobile. These are cross-platform libraries so they can be used in all. There are two main libraries in the solution: Manufaktura.Controls and Manufaktura.Music. The main purpose of the libraries is rendering music scores but they also offer other features such as MusicXML parsing, MIDI playback and helper methods for mathematical operations that are useful in music.
There are also legacy libraries for Silverlight and Windows 8. There are implementations for WPF, WinForms, UWP, ASP.NET MVC, ASP.NET Core, etc. The core libraries are cross platform so they can be used in almost any. NET libraries, written in C#, for rendering music notation in desktop, web and mobile apps.
You can find the whole code in GIT repository: What is it For (For Those Who are Not Familiar with my Libraries) The source code attached to this article only contains most important libraries due to attachment size restrictions. I hope that it will be more useful as open source and a large community will soon emerge around it. I’m releasing the code as Open Source project because it did not bring me much profit as a purely commercial project. I completely changed the architecture to allow cross-platform implementations but you can still find some old spaghetti code, especially in the body of rendering strategies. I have made significant improvement in my programming skills in these years but Manufaktura.Controls still uses some code from these two old projects. The project is a continuation of two other projects which I created eight years ago and which are described in the following articles: This article briefly describes the most important basics of the library Manufaktura.Controls which I recently released as Open Source project.