Подтвердить что ты не робот

Нарисуйте музыкальный персонал в С#

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

Спасибо.

4b9b3361

Ответ 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 в пользовательском приложении С#. Начнем с того, что вы начали: