如何使用C#编写和播放音乐?

所以,长话短说,我正在制定一个框架来创建一个演化算法,它将编写音乐并将其导出到一个文件供我听。

我的问题是,是否有任何我可以与之交互的程序,以便我可以只提供软件说明并构建它?

如果没有,我自己该怎么做?

考虑到相关主题的范围,我想知道你期望什么样的答案。 我只是把NAudio带到桌子上,可以帮助你完成任务。

既然它也知道MIDI,也许你有一个Midi设备(你的声卡?)然后你可以创建MIDI事件并将它们发送到你的设备。 结果可能是音乐。

您可以使用C#Synth Toolkit的一部分来创建声音。 除了频率和时间之外,还有几个参数。 如果你需要的话,它也会说midi。 它可以与你的(midi / usb-midi)键盘连接,以播放一些riff音符。

对于(进化)参数生成,您需要一种方法让您的算法“测量”生成的输出的质量。 古典音乐理论中有一些指标,但不记得它们。

看起来C#MIDI工具包允许您编写MIDI文件:“Sequence类表示轨道的集合。它还提供加载和保存MIDI文件的function,因此序列可以加载和保存自己。” 因此,假设您可以在代码中构建序列,这应该可以让您轻松入门。

我曾经看过用Java做类似的东西,而MIDI是一种非常容易用于此类事情的格式。 而且因为它是如此基本,几乎所有与音乐相关的程序都会导入它,这意味着你可以做一些事情,比如轻松将它转换成乐谱。

音乐XML

链接: http //www.musicxml.com/

Music XML有无穷无尽的文档。 您可以在http://www.musicxml.com/software/上查看可以读取和编写Music XML的程序列表。

因此,您只需要创建一个具有要序列化的属性的类。 您需要熟悉XML序列化 。 以下是类的外观的粗略示例:

[XmlRoot("score-partwise")] public class Score { Identity identification; Credit credit; List partList; List part; } public class Identity { // Documentation for Identification elements as link 1 below } public class Credit { // Documentation for Credit elements as link 2 below } public class PartItem { // Documentation for Part-List elements as link 3 below } public class Measure { // Documentation for Measure elements as link 4 below } 

指向特定文档的链接

  1. http://www.musicxml.com/UserManuals/MusicXML/MusicXML.htm#CT-MusicXML-identification.htm#kanchor2610
  2. http://www.musicxml.com/UserManuals/MusicXML/MusicXML.htm#CT-MusicXML-credit.htm#kanchor2397
  3. http://www.musicxml.com/UserManuals/MusicXML/MusicXML.htm#CT-MusicXML-part-list.htm#kanchor2838
  4. http://www.musicxml.com/UserManuals/MusicXML/MusicXML.htm#EL-MusicXML-measure.htm

音乐XML示例

写起来相当简单。 以下是一个衡量标准的示例:

    F 5  2 1 eighth down    F 1 5  6 1 quarter  sharp down    A 1 4  8 1 half sharp up   

祝好运!

NFugue是一个音乐编程库。 这是JFugue的C#端口。 不是很完整,但有基本function。 它可以读取和播放MIDI和MusicXML文件,创建自定义音乐模式和进度,保存MIDI文件等。 目前,没有移植实时MIDI信号解析。