11

您将如何为以常规标准符号编写的单个乐器建模简单的乐谱?当然,有很多图书馆可以做到这一点。我主要对在数据结构中表示音乐的不同方式感到好奇。什么效果好,什么效果不好?

忽略动态等一些更棘手的方面,显而易见的方法是将所有内容字面翻译为对象 - 分数由测量组成,由注释组成。我想,合成意味着弄清楚每个音符的开始/结束时间并混合正弦波。

显而易见的方法是好方法吗?还有什么其他方法可以做到这一点?

4

6 回答 6

7

许多从事新的常见西方音乐符号项目的人都使用 MusicXML 作为起点。它提供了乐谱的完整表示,您可以对其进行子集化以满足您的需求。现在有一个 XSD 模式定义,像 ProxyMusic 这样的项目用来创建 MusicXML 对象模型。ProxyMusic 在 Java 中创建这些,但您应该能够使用其他语言的其他 XML 数据绑定工具执行类似的操作。

正如一位 MusicXML 客户所说:

“就我而言,您在 MusicXML 上所做的所有辛勤工作的一个非常重要的好处是,我将它用作音乐‘是’的清晰、结构化和非常‘现实世界实用’的规范,以便设计和实现我的应用程序的内部数据结构。”

有更多可用信息 - XSD 和 DTD、示例文件、教程、支持的应用程序列表、出版物列表等 - 在

http://www.makemusic.com/musicxml

对于标准符号的简单乐谱,MIDI 不是一个很好的模型。MIDI 缺少许多乐谱的基本概念。它被设计为一种表演格式,而不是一种符号格式。

的确,音乐符号不是分层的。由于 XML 是分层的,MusicXML 使用成对的开始-停止元素来表示非分层信息。原生数据结构可以更直接地表示事物,这也是 MusicXML 只是数据结构起点的原因之一。

如需更直接的方式来表示同时捕捉其水平和垂直结构的音乐符号,请查看Humdrum格式,它使用更多的电子表格/格子模型。Humdrum 特别用于音乐学和音乐分析应用程序,其数据结构工作得特别好。

于 2009-01-31T06:49:13.720 回答
5

MIDI 文件将是执行此操作的常用方法。MIDI 是一种标准格式,用于存储有关音符的数据,包括开始和结束时间、音符音量、演奏的乐器以及各种特殊特性;您可以找到大量用于读取和写入文件并以数组或对象表示其中的数据的预编写库(包括一些开源库),尽管它们通常不会通过为每个音符设置一个对象来做到这一点,这将增加了大量的内存开销。

MIDI 中定义的乐器只是从 1 到 128 的数字,它们具有象征性的名称,例如小提琴或小号,但 MIDI 本身并没有说明乐器的实际声音应该是什么样子。这就是合成器的工作,它将高级 MIDI 数据转换成声音。原则上,是的,您可以通过叠加正弦波来创建任何声音,但这在实践中效果不佳,因为一旦您并行播放几首曲目,它就会变得计算密集;此外,当您试图重现乐器的真实声音和演奏乐器的表现力时,简单的傅立叶频谱(正弦波的相对强度)是不够的。(我已经写了一个简单的合成器来做到这一点,所以我很难知道它可以产生一个不错的声音)那里'

此外,这可能仅与问题内容相关,但您可能对名为ChuckK的音频编程语言感兴趣。它是由处于编程和音乐十字路口的人们设计的,您可以通过玩弄它来很好地了解声音合成的当前状态。

于 2009-01-22T04:16:09.630 回答
3

数据结构中的音乐,标准符号,......

听起来你会对LilyPond感兴趣。

Most things about musical notation are almost purely mechanical (there are rules and guidelines even for the complex, non-trivial parts of notation), and LilyPond does a beautiful job of taking care of all those mechanical aspects. What's left is input files that are simple to write in any text editor. In addition to PDFs, LilyPond can also produce Midi files.

If you felt so inclined, you could generate the text files algorythimically with a program and call LilyPond to convert it to notation and a midi file for you.

I doubt you could find a more complete and concise way to express music than an input file for LilyPond.

Please understand that music and musical notation is not hierarchical and can't be modelled(well) by strict adherence to hierarchical thinking. Read this for mor information on that subject.

Have fun!

于 2009-02-18T11:53:09.920 回答
2

嗯,有趣的问题。

实际上,我很想将它与 Composite 一起变成命令模式。这有点颠覆了正常的 OO 方法,因为您在某种意义上使建模对象成为动词而不是名词。它会是这样的:

Note 是一个具有一种方法的类,play(), and a ctor taking长度and音调。

你需要一个仪器来定义合成器的行为:音色、起音等等。

然后你会得到一个分数,它有一个时间签名,是一个包含度量的复合模式;措施包含注释。

实际上玩它意味着解释一些其他的东西,比如重复和尾声,它们是其他容器。要播放它,您需要解释 Composite 的层次结构,将音符插入队列;当音符根据节奏在队列中移动时,每个音符都会play()调用其方法。

嗯,可能会颠倒过来;每个音符都作为仪器的输入,仪器通过根据需要合成波形来解释它。这又回到了你原来的计划。

分解的另一种方法是应用帕纳斯定律:分解是为了保留需求可能发生变化的秘密位置。但我认为最终会出现类似的分解;你可以改变拍号和调音,你可以改变乐器——一个音符不管你是在小提琴、钢琴还是马林巴琴上演奏。

有趣的问题。

于 2009-01-22T04:00:48.447 回答
2

我的音乐创作软件(请参阅我的个人资料以获取链接)使用音符作为主要单位(具有起始位置、长度、音量、平衡、释放持续时间等属性)。音符被分组为 Patterns(有自己的起始位置和重复属性),这些 Patterns 被分组为 Tracks(有自己的乐器或乐器)。

混合正弦波是合成声音的一种方法,但它非常罕见(它很昂贵而且听起来不太好)。波表合成(我的软件使用)计算成本低且相对容易编码,并且它可以产生的各种声音基本上是无限的。

于 2009-01-22T04:02:46.633 回答
1

The usefulness of a model can only be evaluated within a given context. What is it you are trying to do with this model?

Many respondents have said that music is non-hierarchical. I sort of agree with this, but instead suggest that music can be viewed hierarchically from many different points of view, each giving rise to a different hierarchy. We may want to view it as a list of voices, each of which has notes with on/off/velocity/etc attributes. Or we may want to view it as vertical sonorities for the purpose of harmonic analysis. Or we may want to view it in a way suitable for contrapuntal analysis. Or many other possibilities. Worse still, we may want to see it from these different points of view for a single purpose.

Having made several attempts to model music for the purposes of generating species counterpoint, analysing harmony and tonal centers, and many other things, I have been continuously frustrated by music's reluctance to yield to my modelling skills. I'm beginning to think that the best model may be relational, simply because to a large extent, models based on the relational model of data strive not to take a point of view about the context of use. However, that may simply be pushing the problem somewhere else.

于 2014-01-31T09:04:58.807 回答