Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C语言画一根音乐棒#_C#_.net_Draw_Libraries_Music Notation - Fatal编程技术网

C# 用C语言画一根音乐棒#

C# 用C语言画一根音乐棒#,c#,.net,draw,libraries,music-notation,C#,.net,Draw,Libraries,Music Notation,我希望在.NET(C#)表单上绘制一个音乐工作人员。我正在使用Microsoft Visual C#2010 Express。我想知道是否有人知道现有的代码或现有的免费.NET库可以提供帮助。我在看画高音和低音谱号的工作人员和增加一个四分之一的注意到一些地方的工作人员。我正在用C#为我儿子制作一个钢琴测试应用程序。如果我自己编写代码,我将很有可能重写onPaint方法。但我想我会看看是否有人看到了一些免费的代码或库可以让我开始。这将是一个困难的项目。Finale为注释和其他符号使用自定义字体。这

我希望在.NET(C#)表单上绘制一个音乐工作人员。我正在使用Microsoft Visual C#2010 Express。我想知道是否有人知道现有的代码或现有的免费.NET库可以提供帮助。我在看画高音和低音谱号的工作人员和增加一个四分之一的注意到一些地方的工作人员。我正在用C#为我儿子制作一个钢琴测试应用程序。如果我自己编写代码,我将很有可能重写onPaint方法。但我想我会看看是否有人看到了一些免费的代码或库可以让我开始。

这将是一个困难的项目。Finale为注释和其他符号使用自定义字体。这可能是一个让你开始的有效方法

你也可以退房。它是开源的,用Java编写。你可能会把重要的部分翻译过来,或者借用一些概念


编辑:这可能也很有用:

您可能会看到几年前用C语言编写的音乐编辑程序。我看起来有点希望:

仔细想想,绘制乐谱所需的原语数量相当少,特别是如果你不太喜欢的话。基本上你需要的是:

  • 垂直线(注3)
  • 水平线(员工线)
  • 全椭圆和轮廓(代表注释)
  • 夏普和平底鞋已经为您提供了#和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);
    }
}
使用系统;
使用系统图;
使用System.Windows.Forms;
使用System.Drawing.Drawing2D;
公共部分类音乐表单:表单
{
公共音乐表格()
{
初始化组件();
}
私人内部员工人数=15人;
私有整数_notehht=12;
私有整数_noteWdth=20;
私人钢笔_notePen=新钢笔(颜色:黑色,2);
私人画笔_noteBrush=画笔。黑色;
私有void musicPanel_Paint(对象发送器,PaintEventArgs e)
{
图形g=e.图形;
g、 SmoothingMode=SmoothingMode.HighQuality;
//划出一些界线
对于(int i=1;i<6;i++)
g、 抽绳(钢笔,黑色,0,i*\u staffHght,musicPanel.宽度,i*\u staffHght);
//画四张半随机的全音符和四分之一音符
g、 抽屉(\u notePen,10,2*\u staffhgh,\u noteWdth,\u noteHght);
g、 抽屉(\u notePen,50,4*\u staffhgh,\u noteWdth,\u notehgh);
g、 圆角椭圆(_noteBrush,100,2*_staffhgh,_noteWdth,_notehgh);
g、 圆角椭圆(_noteBrush,150,4*_staffhgh,_noteWdth,_notehgh);
}
}

这个绘制函数当然必须更加动态:在原语集合中充满循环…

在Unicode代码集中(从U+1D100开始)有生成音乐输出所需的原语。例如,U+1D11A为5行标尺,U+1D158为封闭式记事本

…然后问题就变成了确保你有一个包含适当字形的字体(以及正确处理间距等问题)


如果您希望生成打印输出,您应该查看,这是一个OSS music notation软件包,它使用文本文件格式定义音乐内容,然后生成华丽的输出。

如果您希望在自定义C#应用程序中使用1D100.pdf中描述的Unicode音乐符号。以下内容将帮助您开始:

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);
    }
}
  • 从下载Symbola字体
  • 字符串中32位unicode字符的使用
    \U0001D100
    -
    \U00001D1FF

之前的一位评论员提到了为此目的将java的漂亮工具移植到c#


,效果很好。

哇,好项目。听起来很有趣!我已经接受了Unicode的答案,我唯一仍在努力的事情就是如何将四分之一纸币翻转过来。你可能会想注意到Niffty是根据GPL授权的。因此,如果他有f.e.一个封闭源代码的应用程序,我不确定将重要部分翻译成
部分。如果他是为他的儿子制作这个软件,那么他可能没有分发可执行文件。在这种情况下,他也不需要发布代码。#和b实际上并不是尖锐而扁平的符号。但它们有Unicode字体。即使是塔荷马也有(夏普是U+266F,平的是U+266D)。我认为你们已经远远超过了所需要的简化。即使在最基本的层面上,我们也需要动态、模糊等等。@Brad:我肯定是过于简单化了。示例代码只有六七行可以执行任何操作。如果真的需要的话,动力学和slurs只是需要添加到混合中的另外两个原语。我的笔记和代码示例实际上是程序员开始思考这样的应用程序如何结合在一起的起点。我喜欢这个解决方案。我从这个站点安装了Symbola字体。。但我不知道怎么画符号。我尝试过:Font f=新字体(“Symbola”,72);g、 抽绳(“U+1D11A”,f,_noteBrush,50,4);我也尝试过“\u1D11A”。有没有关于代码是什么样子的想法?没关系…只是想出来了…最后。上面的网站有一个链接,显示了代码:g.DrawString(“\uD834\uDD1A”,f,_noteBrush,50,4);给莉莉庞德一个大优惠