我希望在.NET(C#)表单上绘制音乐人员。我使用的是Microsoft Visual C#2010 Express。我想知道是否有人知道现有代码或现有的免费.NET库可以帮助解决这个问题。我正在考虑绘制高音和低音谱号的工作人员,并在工作人员的某些地方添加四分音符。我正在为我的儿子使用C#制作钢琴测试器应用程序。如果我自己编写代码,我可以直接覆盖onPaint方法。但我想我会看到是否有人看到过一些免费的代码或库可以让我开始。
答案 0 :(得分:13)
在Unicode代码集中生成音乐输出所需的基元(从U + 1D100开始)。例如,U + 1D11A是一个5行的工作人员,U + 1D158是一个封闭的符头。
请参阅http://www.unicode.org/charts/PDF/U1D100.pdf
..然后问题变得确保你有一个包含适当字形的字体(并处理正确间隔的问题等)。
如果您想要生成打印输出,您应该查看Lilypond,这是一个OSS音乐符号包,它使用文本文件格式来定义音乐内容,然后生成华丽的输出。
答案 1 :(得分:5)
几年前你可能会看一下用C#编写的音乐编辑程序。我看起来很有希望: Music Editing Program
答案 2 :(得分:3)
这将是一个困难的项目。结局使用自定义字体作为注释和其他符号。这可能是让你入门的有效方法。
您也可以查看Niffty。它是开源的,用Java编写。您可以翻译重要部分,或借用概念。
修改:这可能也很有用:http://www.c-sharpcorner.com/UploadFile/mgold/musicmaker09242005015433AM/musicmaker.aspx
答案 3 :(得分:3)
如果你考虑一下,绘制音乐符号所需的原语数量相当少,特别是如果你不太花哨的话。你基本上只需要:
我省略了一些更高级的符号,例如高音,低音谱号,但是你可以用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);
}
}
这个绘画功能当然必须更加动态:在你的原语集合中充满了循环......
答案 4 :(得分:0)
如果您想在自定义C#应用程序中使用1D100.pdf中描述的unicode Musical Symbols。以下内容将帮助您入门:
\U0001D100
- \U00001D1FF
答案 5 :(得分:0)
之前的评论员提到为此目的将java的Niffty工具移植到c#。