23

.NET (C#) フォームに譜表を描画しようとしています。Microsoft Visual C# 2010 Express を使用しています。それを助けることができる既存のコードまたは既存の無料の.NETライブラリを誰かが知っているかどうか疑問に思っていました。高音部譜表と低音部譜表の両方を描画し、譜表のどこかに 4 分音符を 1 つ追加することを考えています。私は息子のために C# を使用してピアノ テスター アプリを作成しています。自分でコーディングする場合は、おそらく onPaint メソッドをオーバーライドするだけです。しかし、誰かが私を始めるのに利用できる無料のコードまたはライブラリを見たかどうかを確認すると思いました。

4

6 に答える 6

14

Unicode コード セット (U+1D100 から始まる) には、音楽出力を生成するために必要なプリミティブがあります。たとえば、U+1D11A は 5 線譜、U+1D158 は閉じた符頭です。

http://www.unicode.org/charts/PDF/U1D100.pdfを参照してください。

..次に、適切なグリフが含まれている書体を使用していることを確認することが問題になります (そして、物事を正しく配置するなどの問題に対処します)。

印刷出力を生成しようとしている場合は、テキスト ファイル形式を使用して音楽コンテンツを定義し、豪華な出力を生成する OSS 楽譜作成パッケージであるLilypondを検討する必要があります。

于 2010-10-29T14:21:52.387 に答える
5

数年前に C# で書かれた音楽編集プログラムを見たことがあるかもしれません。私はやや有望に見えます: 音楽編集プログラム

于 2010-10-29T14:17:56.777 に答える
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);
    }
}

もちろん、このペイント関数はもっと動的である必要があります。プリミティブのコレクションのループでいっぱいです...

于 2010-10-29T14:18:57.657 に答える
3

これは難しいプロジェクトになります。Finaleでは、音符やその他の記号にカスタム フォントを使用しています。それはあなたが始めるための効率的な方法かもしれません。

Nifftyもチェックしてください。オープンソースで、Java で書かれています。重要な部分を翻訳したり、概念を借用したりできます。

編集:これも役に立つかもしれません: http://www.c-sharpcorner.com/UploadFile/mgold/musicmaker09242005015433AM/musicmaker.aspx

于 2010-10-29T14:12:59.580 に答える
0

カスタムC#アプリケーションで1D100.pdfに記載されているUnicodeMusicalSymbolsを使用する場合。以下から始めます。

于 2011-08-22T17:18:16.827 に答える
0

以前のコメンテーターは、この目的のために Java の Niffty ツールを c# に移植することに言及しました。

それはすでに行われていることが判明し、うまく機能します。

于 2017-05-31T04:57:06.507 に答える