Zeichnen Sie ein Musik-Personal in C #
-
27-09-2019 - |
Frage
Ich suche ein Musik-Personal auf einem .NET (C #) Form zu zeichnen. Ich bin mit Microsoft Visual C # 2010 Express. Ich habe mich gefragt, ob jemand von vorhandenen Code kannte oder vorhandene freie .NET-Bibliotheken, die können helfen, mit diesem. Ich bin auf der Suche sowohl die Höhen und Bass-Schlüssel Personal und Hinzufügen einer Viertelnote zu einigen, wo in den Mitarbeitern zu ziehen. Ich mache ein Piano Tester App mit C # für meinen Sohn. Wenn ich Code es mich, werde ich proably außer Kraft setzen nur die OnPaint-Methode. Aber ich dachte, ich würde sehen, ob jemand etwas freien Code oder Bibliothek mich gesehen hat, zur Verfügung zu beginnen.
Lösung
Es werden die erforderlichen Primitiven musical Ausgabe in dem Unicode-Codesatz zu erzeugen (ab U + 1D100). Zum Beispiel U + 1D11A ist ein 5-zeiliges Personal, U + 1D158 ist ein geschlossene Notenkopf.
Siehe http://www.unicode.org/charts/PDF/U1D100.pdf
.. dann das Problem wird dafür sorgen, dass Sie eine Schrift mit den entsprechenden Glyphen haben enthalten (und den Umgang mit den Fragen der Dinge richtig Abstand, etc.)
Wenn Sie schauen, gedruckte Ausgabe zu erzeugen, sollte man sich Lilypond , die ein OSS Notations Paket, dass verwendet ein Textdateiformat der Musikinhalt und erzeugt dann wunderschön ausgegeben.
zu definierenAndere Tipps
Sie könnten bei einem Musikbearbeitungsprogramm suchen in C # vor ein paar Jahren geschrieben. Ich sehe etwas viel versprechend: Music Editing-Programm
Das wird ein schwieriges Projekt. Finale verwendet eine benutzerdefinierte Schriftart für Notizen und andere Symbole. Das könnte eine effiziente Möglichkeit, um Ihnen den Einstieg erleichtern.
Sie können beachten Sie auch Niffty . Es ist Open-Source und geschrieben in Java. Sie könnten wahrscheinlich die wichtigen Teile über oder borrow Konzepte umzusetzen.
Edit: Dies kann auch nützlich sein: http://www.c-sharpcorner.com/UploadFile/mgold/musicmaker09242005015433AM/musicmaker.aspx
Wenn man darüber nachdenkt, die Anzahl von Primitiven benötigt Musiknotation zu zeichnen ist ziemlich klein, vor allem, wenn Sie nicht zu extravagant bekommen. Alles, was Sie im Grunde notwendig ist:
- Vertikale Linien (Hälse)
- Horizontale Linien (Notenlinien)
- Ovals voll und skizziert (die Noten)
- Sharp und Wohnungen sind bereits für Sie mit # und b bereitgestellt
Es gibt einige ausgefallenere Symbole, dass ich wie Höhen weggelassen, Bassschlüssel Noten aber die kann man Käse mit T- und B oder einen schicken Schrift, dass Macht Arbeit finden.
Sehr einfach, Beispielcode für den Anfang:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
public partial class MusicForm : Form
{
public MusicForm()
{
InitializeComponent();
}
private int _staffHght = 15;
private int _noteHght = 12;
private int _noteWdth = 20;
private Pen _notePen = new Pen(Color.Black, 2);
private Brush _noteBrush = Brushes.Black;
private void musicPanel_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
// draw some staff lines
for (int i = 1; i < 6; i++)
g.DrawLine(Pens.Black, 0, i * _staffHght, musicPanel.Width, i * _staffHght);
// draw four semi-random full and quarter notes
g.DrawEllipse(_notePen, 10, 2 * _staffHght, _noteWdth, _noteHght);
g.DrawEllipse(_notePen, 50, 4 * _staffHght, _noteWdth, _noteHght);
g.FillEllipse(_noteBrush, 100, 2 * _staffHght, _noteWdth, _noteHght);
g.FillEllipse(_noteBrush, 150, 4 * _staffHght, _noteWdth, _noteHght);
}
}
Diese Farbe Funktion würde natürlich viel dynamischer sein: voller Schleifen auf Sammlungen von Primitiven ...
Wenn Sie die Unicode-Musik-Symbole als descibed im 1D100.pdf in einer benutzerdefinierten C # .NET-Anwendung verwenden. Im Folgenden werden Sie den Start:
- Download Symbola Schriftart von http://users.teilar.gr/~g1951d/
- http: //hongouru.blogspot.com/2010/10/c-how-to-add-fonts-ttf-true-type-fonts.html
- http://www.bobpowell.net/embedfonts.htm
- Verwendung von 32-Bit-Unicode-Zeichen in Strings
\U0001D100
-\U00001D1FF
Ein vorheriger Kommentator erwähnt zu diesem Zweck Java Niffty Tool c # portiert.
Stellt sich heraus, es bereits getan gewesen ist, funktioniert gut.