強力な楽譜コントロールライブラリ

2023 Conmajia、2018 Ajcek84
SN: 23C.1
この中国語翻訳は原著者の承認を得ています。

導入

PSAM コントロール ライブラリ - Polish Music Document System - は、楽譜を表示および書式設定するための強力な WinForm ライブラリです。これには、楽譜を描画するための IncipitViewer と呼ばれるコントロールが含まれています。楽譜の内容は、MusicXmlファイルから読み取ることができ、フーガは、注意事項、対策などをプログラムに追加しました。このコントロールは、PSAMソフトウェア用に開発されたコンポーネントです (図 1)。他のソフトウェア開発者がその機能を使用したいと考えている可能性があることに気づき、BSD ライセンスの下でコントロールをリリースすることにしました。PSAM 制御ライブラリはすべて C# で実装されています。

図 1. 複数の IncipitViewer の表示効果を示す PSAM システムのスクリーンショット

コードを使用する

IncipitViewer コントロールでは、音符などを描画するために特別な音楽フォントが必要です。この記事で提供されているダウンロード リソースには Polihymnia の TrueType フォントが付属しているため、直接インストールして使用できます。このフォントは、Sil Open Font License に基づいてリリースされた Ben Laenen の Euterpe フォントに基づいています。

IncipitViewer (PSAMControlLibrary.dll) は、標準の C# コントロール ライブラリです。これを Visual Studio フォーム デザイナー ツールボックスにドラッグ アンド ドロップするだけで開始できます。コントロールの使用方法は、TextBox などの通常のコントロールと同様です。IncipitViewer コントロールをプログラムで作成する場合は、次のコードを使用します。

IncipitViewer viewer = new IncipitViewer();
viewer.Dock = DockStyle.Fill;
Controls.Add(viewer);

一般に、Visual Studio は自動的に追加します。

using PSAMControlLibrary;

このコントロールは、MusicXML ファイルから楽譜を読み取る機能を提供します。最初の行譜表1のみを読み取り、後続の譜表は無視します。

viewer.LoadFromXmlFile("example.xml");

ファイルから楽譜を読み込んで表示する効果は以下のとおりです。

図 2. IncipitViewer を使用して MusicXML ファイルのコンテンツを表示する

ClearMusicalIncipit()現在の表示をクリアするにはメソッドを使用します。

このコントロールは、プログラムでメモなどを追加するためのコードを提供します。たとえば、次のコードはスコアの 2 行目にト音記号を追加します。

Clef c = new Clef(ClefType.GClef, 2);
viewer.AddMusicalSymbol(c);

そしてキー G の新しい 4 分音符 (1=G4/4)。

Note n = new Note("G", 0, 4, MusicalSymbolDuration.Quarter,
  NoteStemDirection.Up, NoteTieType.None,
  new List<NoteBeamType>() {
    
    NoteBeamType.Single});
viewer.AddMusicalSymbol(n);

Note コンストラクターの最初のパラメーターはキー名 (A、B、C、D、E、F、G) で、2 番目のパラメーターはシャープ数値 (+) またはフラット数値 (-) です。立ち上がり、立ち下がり音が0の場合は原音を意味します。3 番目のパラメータはオクターブです。次のパラメータは、音符のテンポ、符尾の方向、およびタイのタイプ (なしの場合NoteTieType.None) です。最後のパラメータは文字のリストです。音符に連桁がない場合、音符の長さが 8 分音符より長い場合でも、このリストは必要ですが、要素は 1 つだけですNoteBeamType.Single連桁リストがどのように機能するかを明確に示すために、次のコードは 2 つの 16 分音符と 1 つの 8 分音符で構成されるグループを追加しようとします。

Note s1 = new Note("A", 0, 4, MusicalSymbolDuration.Sixteenth, 
	NoteStemDirection.Down, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.Start, NoteBeamType.Start});
Note s2 = new Note("C", 1, 5, MusicalSymbolDuration.Sixteenth, 
	NoteStemDirection.Down, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.Continue, NoteBeamType.End });
Note e = new Note("D", 0, 5, MusicalSymbolDuration.Eighth, 
	NoteStemDirection.Down, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.End });
viewer.AddMusicalSymbol(s1);
viewer.AddMusicalSymbol(s2);
viewer.AddMusicalSymbol(e);

表示されている楽譜は以下です。

ブレークバーが に設定されている場合NoteBeamType.Single、スコアは次のようになります。

このコントロールは、ノートのプロパティを変更するだけで、色付きノートもサポートしますMusicalCharacterColor

IncipitViewer は単一譜表のみをサポートしますが、和音は多くの単旋律楽器のイディオムの一部であるため、引き続きサポートします。ノートのIsChordElementプロパティが に設定されている場合true、そのノートは前のノートのコード要素として扱われます。

Note n1 = new Note("C", 0, 4, MusicalSymbolDuration.Half, 
	NoteStemDirection.Up, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.Single });
Note n2 = new Note("E", 0, 4, MusicalSymbolDuration.Half, 
	NoteStemDirection.Up, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.Single });
Note n3 = new Note("G", 0, 4, MusicalSymbolDuration.Half, 
	NoteStemDirection.Up, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.Single });
n2.IsChordElement = true;
n3.IsChordElement = true;

viewer.AddMusicalSymbol(n1);
viewer.AddMusicalSymbol(n2);
viewer.AddMusicalSymbol(n3);

結果は以下の通り。

以下のコードは、ドット、休符、小節区切りを示しています。

Note n4 = new Note("A", 0, 4, MusicalSymbolDuration.Half,
	NoteStemDirection.Up, NoteTieType.None,
	new List<NoteBeamType>() {
    
     NoteBeamType.Single });
n4.NumberOfDots = 1;
Rest r = new Rest(MusicalSymbolDuration.Quarter);
Barline b = new Barline();
viewer.AddMusicalSymbol(n4);
viewer.AddMusicalSymbol(r);
viewer.AddMusicalSymbol(b);

結果は以下の通り。

マウスのインタラクション

マウスをコントロール上に置くと、右上隅に 2 つのボタンが表示されます。1 つ目は、コントロールに関連付けられた MusicXml ファイルを保存するために使用され、2 つ目は、次のようにOnPlayExternalMidiPlayer使用されるイベント ハンドラーを呼び出すために使用されます。

viewer.PlayExternalMidiPlayer += 
	new IncipitViewer.PlayExternalMidiPlayerDelegate(viewer_PlayExternalMidiPlayer);
void viewer_PlayExternalMidiPlayer(IncipitViewer sender) {
    
    
    //Place your code here
}

これにより、コードを使用して既存のコントロールからノートを読み取り、カスタム コードまたは他のサードパーティ ライブラリを使用して再生することができます。IncipitViewer.IncipitElement(int i)このメソッドは i 番目の音符を読み取り、MusicalSymbol.ToMidiPitch()空間内の音符を MIDI に変換します。

IncipitViewer コントロールの内容を印刷するには、PrintDocumentオブジェクトを作成し、そのPrintPageイベントを処理します。

private void printDocument1_PrintPage(object sender, 
	System.Drawing.Printing.PrintPageEventArgs e) {
    
    
    Graphics g = e.Graphics;
    viewer.DrawViewer(g, true);
}

次に、Print()音楽ドキュメントを印刷するメソッドを呼び出します。

PrintDialog dlg = new PrintDialog();
dlg.Document = printDocument1;
if (dlg.ShowDialog() == DialogResult.OK) {
    
    
     printDocument1.Print();
}

印刷サンプルは以下の通りです。

ライセンス

この記事とそれに付随するファイルおよびコードは、BSDライセンスに基づいてリリースされています。


  1. 音部記号とは、図に示すように、ト音記号 (上) とヘ音記号 (下) のように、音部記号と五線を合わせたものを指します。

    ↩︎

おすすめ

転載: blog.csdn.net/conmajia/article/details/135298079