Нарисуйте музыкальный коллектив в C # - PullRequest
23 голосов
/ 29 октября 2010

Я хочу нарисовать музыкальный штат в форме .NET (C #). Я использую Microsoft Visual C # 2010 Express. Мне было интересно, знает ли кто-нибудь о существующем коде или существующих бесплатных библиотеках .NET, которые могут помочь с этим. Я смотрю на то, как нарисовать персонал для высоких и басовых ключей и добавить четвертную ноту к некоторым сотрудникам. Я делаю приложение Piano Tester, используя C # для моего сына. Если я сам его кодирую, вероятно, я просто переопределю метод onPaint. Но я подумал, что увижу, видел ли кто-нибудь какой-нибудь бесплатный код или библиотеку, чтобы начать меня.

Ответы [ 6 ]

13 голосов
/ 29 октября 2010

В наборе кодов Unicode есть необходимые примитивы для генерации музыкального выхода (начиная с U + 1D100). Например, U + 1D11A - это штат из 5 строк, U + 1D158 - закрытый заголовок.

См. http://www.unicode.org/charts/PDF/U1D100.pdf

.. тогда проблема становится в том, чтобы убедиться, что у вас есть шрифт с соответствующими символами (и правильно решать вопросы с пробелами и т. Д.)

Если вы хотите сгенерировать вывод на печать, вам следует взглянуть на Lilypond , который представляет собой пакет нотной записи OSS, который использует формат текстового файла для определения музыкального контента, а затем создает великолепный вывод. 1010 *

5 голосов
/ 29 октября 2010

Вы можете посмотреть на программу для редактирования музыки, написанную на C # несколько лет назад. Я выгляжу несколько многообещающе: Программа редактирования музыки

3 голосов
/ 29 октября 2010

Если подумать, то количество примитивов, необходимых для рисования музыкальной нотации, довольно мало, особенно если вы не слишком увлечены. Все, что вам в основном нужно, это:

  • Вертикальные линии (примечание стебли)
  • Горизонтальные линии (линии персонала)
  • Овалы, полные и очерченные (с примечаниями)
  • Sharp и Flats уже предоставлены для вас с # и b

Есть некоторые причудливые символы, которые я пропустил, такие как высокие частоты, метки басового ключа, но те, которые вы могли бы использовать для сыра с помощью 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);
    }
}

Эта функция рисования, конечно, должна быть намного более динамичной: полная циклов в ваших коллекциях примитивов ...

3 голосов
/ 29 октября 2010

Это будет сложный проект.Finale использует собственный шрифт для заметок и других символов.Это может быть эффективным способом начать работу.

Вы также можете проверить Отличный .Это с открытым исходным кодом и написано на Java.Возможно, вы могли бы перевести важные части или позаимствовать концепции.

Редактировать: Это также может быть полезно: http://www.c -sharpcorner.com / UploadFile / mgold / musicmaker09242005015433AM /musicmaker.aspx

0 голосов
/ 31 мая 2017

Предыдущий комментатор упоминал о переносе Java-инструмента Niffty на c # для этой цели.

Оказывается, это уже сделано , работает хорошо.

0 голосов
/ 22 августа 2011

Если вы хотите использовать музыкальные символы Юникода, как описано в 1D100.pdf в пользовательском приложении C #.Следующее поможет вам начать:

...