单击此处跳至主要内容
16009474名成员

PSAM控制库

给我打分:
拜托注册或登录投票表决。
4.98/5(71票)
2018年7月19日BSD公司5分钟读取14.92万 360公里 95 64
包含用于绘制音符的IncipitViewer控件的WinForms库

介绍

更新:这篇文章描述了一位老人。NET项目,最终演变为更大的开源框架Manufaktura。控制。你可以在这里阅读:https://www.codeproject.com/Articles/1252423/Music-Notation-in-NET 

PSAM控制库是一个WinForms库,包含IncipitViewer(初始查看器)用于绘制可从中读取的音符的控件音乐XML文件或以编程方式添加。该图书馆最初是大型软件波兰音乐档案系统的组成部分(http://www.archiwistykamuzyczna.pl/?lang=en)但我认为它可能对其他软件开发人员有用,所以我决定根据BSD许可证发布它。PSAM控制库是在Microsoft Visual Studio Express下用C#编写的。

以下屏幕说明了许多IncipitViewer(初始查看器)手稿数据库应用程序中的控件:

psam控制库/psam.jpg

PSAM Control Library官方网站位于http://musicengravingcontrols.com/.

使用代码

Incipit查看器控件需要特殊的字体来绘制注释和其他音乐符号。您可以创建自己的字体或使用包含的字体Polihymnia,该字体基于Ben Laenen的Euterpe字体,并在Sil Open font Licence下分发。当然,您必须在字体目录中安装字体才能正确显示注释。

最简单的添加方式IncipitViewer(初始查看器)对项目的控制是拖放PSAM控制库.dll文件到您的工具箱然后拖放IncipitViewer(初始查看器)控件。您也可以创建IncipitViewer(初始查看器)以编程方式控制,例如:

C类#
IncipitViewer查看器=新的IncipitViewer();查看器。Dock=DockStyle。填充;控制。添加(查看器);

记住添加使用PSAMControlLibrary;对代码的指令。

从中读取音乐音乐XML文件使用LoadFromXmlFile(字符串文件名)方法,并键入要打开的XML文件的路径作为参数。请记住,只支持第一个冷却壁-其他冷却壁将被跳过。

C类#
查看器。从XML文件加载("example.xml“);

上述代码的效果应如下所示:

psamcontrollibrary/incipitviewerxml.png

要清理员工,请使用ClearMusicalIncipit()方法:

C类#
查看器。ClearMusicalIncipit();

我们还可以通过编程添加音符和音乐符号。首先,我们将在第2行添加G谱号:

C类#
裂缝c=新的裂缝(裂缝类型.GClef,2);查看器。添加音乐符号(c);

然后我们将添加一个新的季度注释G:

C类#
注释n=新的注释("G“,0,4、MusicalSymbolDuration。季度,注释阀杆方向。Up,NotesTieType。无,新的列表<NoteBeamType>(){NoteBeamType。单个});查看器。添加音乐符号(n);

Note构造函数的第一个参数是一串表示以下步骤的名称之一:A、B、C、D、E、F、G。第二个参数是锐角数(正数)或平角数(负数),其中0表示没有变化。第三个参数是八度音阶的数字。接下来的参数是:音符的持续时间、音杆方向和领带类型(注释类型。如果便条没有系好)。最后一个参数是梁列表。如果注释没有任何梁,则它必须仍然具有只有一个元素的列表NoteBeamType。单个(即使音符的持续时间大于第八个音符)。为了弄清楚波束列表是如何工作的,让我们尝试添加一组由两个波束组成的第十六个波束和第八个波束:

C类#
注释s1=新的注释("A“,0,4、MusicalSymbolDuration。第十六,注释阀杆方向。向下,NotesTieType。无,新的列表<NoteBeamType>(){NotesBeamType.Start,NotesBeamType.Start});注释s2=新的注释("C“,1,5、MusicalSymbolDuration。第十六,注释阀杆方向。向下,NotesTieType。无,新的列表<NoteBeamType>(){NotesBeamType.Continue,NotesBeamType.End});注释e=新的注意("D“,0,5、MusicalSymbolDuration。第八,注释阀杆方向。向下,NotesTieType。无,新的列表<NoteBeamType>(){NotesBeamType.End});查看器。添加音乐符号(s1);查看器。添加音乐符号(s2);查看器。添加音乐符号(e);

结果应该是这样的:

psam控制库/incipitviewerbeams.png

当所有梁都设置为NoteBeamType。单个:

psamcontrollibrary/incipitviewerbeamsingle.png

您可以通过更改彩色音符和音乐符号音乐角色颜色属性:

psam控制库/colourfulnotes.png

尽管IncipitViewer(初始查看器)它支持和弦,因为和弦是许多单声道乐器习惯用法的一部分。如果IsChord元素注释的属性设置为真实的,音符被视为前一音符的和弦元素:

C类#
注释n1=新的注释("C“,0,4、MusicalSymbolDuration。一半,注释阀杆方向。Up,NotesTieType。无,新的列表<NoteBeamType>(){NoteBeamType。单个});注释n2=新的注释("E“,0,4、MusicalSymbolDuration。一半,注释阀杆方向。Up,NotesTieType。无,新的列出<NoteBeanType>(){NoteBeanType。单个});注释n3=新的注释("G“,0,4、MusicalSymbolDuration。一半,注释阀杆方向。Up,NotesTieType。无,新的列表<NoteBeamType>(){NoteBeamType。单个});n2.IsChord元素=真实的;n3.IsChord元素=真实的;查看器。添加音乐符号(n1);查看器。添加音乐符号(n2);查看器。添加音乐符号(n3);

结果:

psamcontrol库/examplechords.png

以下示例显示了如何插入点、休止符和横线:

C类#
注释n4=新的注释("A“,0,4、MusicalSymbolDuration。一半,注释阀杆方向。Up,NotesTieType。无,新的列表<NoteBeamType>(){NoteBeamType。单个});n4.点数=1;休息时间r=新的休息(MusicalSymbolDuration.Quarter);Barline b公司=新的Barline();查看器。添加音乐符号(n4);查看器。添加音乐符号(r);查看器。添加音乐符号(b);

结果:

psam控制库/exampledotrestbarline.png

当鼠标悬停在控件上时,右上角会出现两个按钮:第一个按钮用于保存音乐XML与控件关联的文件和第二次调用OnPlayExternalMidiPalayer事件处理程序。您可以订阅播放ExternalMidiPalayer事件:

C类#
查看器。播放ExternalMidiPalayer+=新的IncipitViewer。PlayExternalMidiPlayerDelegate(viewer_PlayExternalMidiPlay);

创建以下用于处理事件的函数:

C类#
空隙viewer_PlayExternalMidiPalayer(IncipitViewer发送方){//在此处放置代码}

在上述函数中,您可以放置一个代码来读取控件中的注释,并使用自己的函数或其他库来播放它们。要从控件访问所需的音乐符号,请使用IncipitViewer。初始元素(int i)方法,其中是元素的索引。要将音符转换为midi音高,您可以使用音乐符号。ToMidiPitch(字符串步长,int alter,int倍频程)方法。

打印的内容IncipitViewer(初始查看器)控件,创建打印文档对象并订阅其打印页面事件:

C类#
私有的 空隙打印文档1_打印页面(对象发件人,系统。图纸。印刷。打印页面事件参数e){Graphics g=e.图形;查看器。DrawViewer(g,真实的);}

然后使用打印()方法:

C类#
打印对话框dlg=新的PrintDialog();图纸。文档=printDocument1;如果(dlg.ShowDialog()==对话框结果。确定){printDocument1.Print();}

打印输出示例:

psam控制库/sample_print.png

兴趣点

与分数的图形布局有关的一个奇怪的问题是确定梁下杆的适当长度。17年第个和18第个世纪印刷的等长音乐杆经常被使用,其结果是横梁“断裂”。分数看起来像这样:

psamcontrollibrary/gibbons.png

然而,在当代音乐雕刻中,横梁必须是直的。不幸的是,直梁导致杆的长度可变,必须通过编程确定杆的适当长度。下图展示了实现这一目标所需的所有价值观:

psam控制库/stem_example.png

为了确定茎末端的位置,我们必须找出y段的长度1,是组中最后一个音符的词干结尾和我们感兴趣的音符的词干结尾之间的垂直距离。因为:

tgα=y<sub>1

那么:

y<sub>1</sub>=x<sub>1

tg alpha值是组中第一个和最后一个音符的音干端点之间的垂直距离与组中第一和最后一条音符音干端点间的水平距离之比(我们假设我们知道这两个值):

tgα=y/x

因此:

y<sub>1(y/x)

1是我们感兴趣的音符的茎端点的垂直坐标。

历史

在版本2.1.0.2中,我添加了彩色注释,并对IncipitViewer(初始查看器)类以允许将此库移植到WPF。此库的WPF版本可用酒店雇员和饭馆雇员.

许可证

本文以及任何相关的源代码和文件都是根据BSD许可证


编写人
波兰波兰
我毕业于波兹南Adam Mickiewicz大学,获得了计算机科学硕士学位(硕士论文:分析中提琴和人声的声音,并尝试使用各种数字信号分析技术比较它们的音色)音乐学学士学位(文学学士论文:《欧洲音乐理论中的连续性和过渡——以扎利诺的《和声研究所》第三部分和伯恩哈德的《Tractatus Compositionis Augmentatus》为例)。我还毕业于波兹南Fryderyk肖邦音乐学校的一个独唱班。我是一名自学成才的作曲家,也是非正式国际组织Vox Saigleorum的成员,聚集作曲家,共同的目标是在当代书面音乐中复兴旧(主要是巴洛克)风格和作曲传统。我是利兹瓦克-沃明斯基国际早期音乐暑期学校的年度参与者。

评论和讨论

 
你必须登录使用此留言板。
间距布局每页   
问题我无法添加后续事件。 引脚
会员138438632019年9月19日1:18
会员138438632019年9月19日1:18
答案回复:我无法添加后续事件。 引脚
马可·贝茨基2019年9月19日1:21
保护器马可·贝茨基2019年9月19日1:21
问题本文中所述的当前URL是什么? 引脚
hgn1型2017年1月8日17:08
hgn1型2017年1月8日17:08
答案回复:本文中当前的URL是什么? 引脚
阿杰切克842018年1月14日10:35
阿杰切克842018年1月14日10:35
问题Incipit Viewer中的第二个Stave?? 引脚
成员117561692015年8月22日23:15
成员117561692015年8月22日23:15
答案关于:Incipit Viewer中的第二次停留?? 引脚
阿杰切克842015年9月11日2:56
阿杰切克842015年9月11日2:56
问题PlayExternalMidiPlayer无效示例 引脚
r3drogo公司2015年7月22日19:06
r3drogo公司2015年7月22日19:06
问题发布新版本? 引脚
KoHHeKT公司2015年5月31日5:28
KoHHeKT公司2015年5月31日5:28
答案回复:发布新版本? 引脚
阿杰切克842016年6月7日10:39
阿杰切克842016年6月7日10:39
问题如何集成PSAM控制库 引脚
成员115665552015年4月12日23:23
成员115665552015年4月12日23:23
答案关于:如何集成PSAM控制库 引脚
tctom公司2015年4月28日7:48
tctom公司2015年4月28日7:48
答案关于:如何集成PSAM控制库 引脚
阿杰切克842015年7月19日7:12
阿杰切克842015年7月19日7:12
概述享受乐趣,使控件可扩展 引脚
tctom公司2015年1月23日9:53
tctom公司2015年1月23日9:53
概述主题:让控件具有可扩展性 引脚
阿杰切克842015年7月19日7:06
阿杰切克842015年7月19日7:06
概述主题:让控件具有可扩展性 引脚
发条傀儡2016年4月25日16:05
发条傀儡2016年4月25日16:05
概述主题:让控件具有可扩展性 引脚
r3drogo公司2015年7月22日19:09
r3drogo公司2015年7月22日19:09
问题休息的问题 引脚
罗伯特·斯特凡兹2014年12月10日4:09
罗伯特·斯特凡兹2014年12月10日4:09
答案回复:休息问题 引脚
阿杰切克842015年1月4日22:39
阿杰切克842015年1月4日22:39
问题“bool print”参数的含义? 引脚
西格蒙德病毒2013年8月22日23:04
西格蒙德病毒2013年8月22日23:04
答案回复:“bool print”参数的含义? 引脚
阿杰切克842013年8月23日1:55
阿杰切克842013年8月23日1:55
概述我投了5票 引脚
wmjordan(约旦)2013年4月21日15:07
专业的wmjordan(约旦)2013年4月21日15:07
概述回复:我投了5票 引脚
阿杰切克842018年1月14日10:36
阿杰切克842018年1月14日10:36
问题必须安装什么字体? 引脚
enochenoch2k公司2011年11月29日15:55
enochenoch2k公司2011年11月29日15:55
答案回复:必须安装什么字体? 引脚
阿杰切克842011年11月29日21:14
阿杰切克842011年11月29日21:14
概述回复:必须安装什么字体? 引脚
enochenoch2k公司2011年11月30日2:17
enochenoch2k公司2011年11月30日2:17

概述概述新闻新闻建议建议问题问题缺陷臭虫答案答案笑话笑话赞美赞美兰特兰特行政管理员

使用Ctrl+Left/Right切换消息,Ctrl+Up/Down切换线程,Ctrl+Shift+Left/Light切换页面。