2010-10-29 2 views
23

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

Спасибо.

+0

Ничего себе хороший проект. Звучит интересно! –

+1

+1 для сына :-) – chiccodoro

+0

Я принял ответ Юникод, там только то, что я все еще пытаюсь получить, это как перевернуть четвертную ноту вверх ногами. – JeffJak

ответ

13

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

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

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

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

+1

+1 Хорошая находка на символах –

+0

Мне это нравится. Я установил шрифт Symbola с этого сайта. Http: //www.fileformat.info/info/unicode/char/1d11e/fontsupport.htm. Но я не знаю, как нарисовать символ. Я попробовал: Font f = new Font («Symbola», 72); g.DrawString («U + 1D11A», f, _noteBrush, 50, 4); Я также попробовал «\ u1D11A». Любые идеи о том, как будет выглядеть код? – JeffJak

+2

Ничего ... Просто подумал ... наконец. На вышеуказанном сайте была ссылка на этот http://www.fileformat.info/info/unicode/char/1d11a/index.htm, который показал, что это будет код: g.DrawString ("\ uD834 \ uDD1A", f , _noteBrush, 50, 4); – JeffJak

3

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

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

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

+0

Возможно, вы захотите отметить, что Niffty лицензируется под лицензией GPL. Поэтому я не уверен в том, что «переведите часть важных частей», если у него есть f.e. приложение с закрытым исходным кодом. – Bobby

+0

Если он делает это программное обеспечение для своего сына, то он, вероятно, не распространяет исполняемый файл. В этом случае ему также не нужно публиковать код. – Eyal

5

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

3

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

  • Вертикальные линии (примечание стебли)
  • Горизонтальные линии (линии персонала)
  • овалы полные и изложенные (представляющие ноты)
  • Sharp и Квартиры уже предусмотрены для вас # и 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); 
    } 
} 

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

+1

# и b на самом деле не являются резкими и плоскими символами. Но они доступны в шрифтах Unicode. Даже у Тахомы есть (резкий U + 266F и плоский U + 266D). – siride

+0

Думаю, у вас есть способ упростить то, что нужно. Даже на базовом уровне нам нужна динамика, оскорбления и т. Д. – Brad

+0

@Brad: Я определенно упрощен. Пример кода имеет только шесть или семь строк, которые делают что угодно. И динамика и оскорбления, если это действительно необходимо, просто будут еще двумя примитивами, которые необходимо добавить в микс. Мои заметки и примеры кода буквально являются отправной точкой для программиста, чтобы начать думать о том, как подобное приложение может собраться вместе. –

0

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