Нарисуйте музыкальный персонал в С#
Я хочу нарисовать музыкальный коллектив в форме .NET(С#). Я использую Microsoft Visual С# 2010 Express. Мне было интересно, знает ли кто-нибудь о существующем коде или существующих бесплатных библиотеках .NET, которые могут помочь в этом. Я смотрю на то, чтобы нарисовать как высокочастотный, так и бас-клакский персонал и добавить одну четверть записку к тому, где в штате. Я делаю приложение Piano Tester с помощью С# для своего сына. Если я сам его закодирую, я буду просто переопределять метод onPaint. Но я думал, что увижу, видел ли кто-нибудь бесплатный код или библиотеку, чтобы я начал.
Спасибо.
Ответы
Ответ 1
Есть необходимые примитивы для генерации музыкального выхода в кодировке Unicode (начиная с U + 1D100). Например, U + 1D11A является персоналом из 5 строк, U + 1D158 является закрытой записной книжкой.
См. http://www.unicode.org/charts/PDF/U1D100.pdf
.., тогда проблема будет заключаться в том, что у вас есть шрифт с соответствующими глифами (и проблемы с правильной интерполяцией и т.д.).
ЕСЛИ вы хотите генерировать печатный результат, вы должны посмотреть Lilypond, который представляет собой пакет нотной нотации OSS, который использует текстовый формат файла для определения музыкального контента, а затем генерирует великолепный результат.
Ответ 2
Вы можете посмотреть программу редактирования музыки, написанную на С# несколько лет назад. Я выгляжу несколько многообещающе:
Программа редактирования музыки
Ответ 3
Это будет сложный проект. Финал использует специальный шрифт для заметок и других символов. Это может быть эффективным способом начать работу.
Вы также можете проверить Niffty. Это с открытым исходным кодом и написан на Java. Возможно, вы могли бы перевести важные части или заимствовать понятия.
Изменить: Это также может быть полезно: http://www.c-sharpcorner.com/UploadFile/mgold/musicmaker09242005015433AM/musicmaker.aspx
Ответ 4
Если вы думаете об этом, количество примитивов, необходимых для создания нотной записи, довольно невелико, особенно если вы не слишком задумываетесь. В основном вам нужно:
- Вертикальные линии (примечания)
- Горизонтальные линии (линии персонала)
- Овалы полные и очерченные (представляющие заметки)
- Sharp and Flats уже предоставлены для вас С# и b
Есть некоторые символы fancier, которые я пропустил, такие как высокие частоты, метки басовых клавиш, но те, которые вы могли бы сыра с T и B или найти более удобный шрифт, который мог бы работать.
Очень простой пример кода, чтобы вы начали:
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);
}
}
Эта функция рисования, конечно, должна быть намного более динамичной: полная петли в ваших коллекциях примитивов...
Ответ 5
Если вам нравится использовать музыкальные символы Unicode, как описано в 1D100.pdf в пользовательском приложении С#. Начнем с того, что вы начали:
Ответ 6
Предыдущий комментатор упомянул о переносе java-инструмента Niffty на С# для этой цели.
Оказывается, это уже сделано, прекрасно работает.