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

时间:2011-05-20 23:28:51

标签: c# .net

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

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

如果没有,我该如何自己做?

5 个答案:

答案 0 :(得分:9)

我想知道你期望什么样的答案,考虑到相关主题的范围。我只需将NAudio带到桌面上,这可以帮助您完成工作。

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

看起来the C# MIDI Toolkit允许你编写MIDI文件:“Sequence类代表一组Tracks。它还提供了加载和保存MIDI文件的功能,因此Sequences可以加载和保存自己。”因此,假设您可以在代码中构建一个序列,这应该可以让您轻松上手。

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

答案 3 :(得分:0)

音乐XML

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

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

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

RequestMapping(value = "/checkLogin", method = RequestMethod.POST)

    public static String checkLogin(HttpServletRequest request, final Model model) {

        System.out.println("here i want to access studentdata");

        // Recreate StudentData From request.getParameter(...)

        Studentdata studentdata = new Studentdata();
        studentdata.setProperty1 ( request.getParameter("property1"));
        // ... You may have to convert data too

        return "MyAccount";
}

指向特定文档的链接

  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
  5. 音乐XML示例

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

    [XmlRoot("score-partwise")]
    public class Score
    {
        Identity identification;
        Credit credit;
        List<PartItem> partList;
        List<Measure> 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
    }
    
    祝你好运!

答案 4 :(得分:0)

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