首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在数据结构中表示音乐?

如何在数据结构中表示音乐?
EN

Stack Overflow用户
提问于 2009-01-22 03:43:27
回答 6查看 4.7K关注 0票数 11

您如何为使用常规标准记法编写的单个乐器的简单乐谱建模?当然,有很多库可以做到这一点。我最感兴趣的是在数据结构中表示音乐的不同方式。什么效果好,什么效果不好?

忽略一些更棘手的方面,如动力学,显而易见的方法是将所有东西直译为对象-分数是由注释组成的度量。合成,我想,将意味着计算出每个音符的开始/结束时间,并混合正弦波。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-01-22 04:16:10

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

MIDI中定义的乐器只是从1到128的数字,它们有象征性的名称,比如小提琴或小号,但MIDI本身并没有说明乐器实际上应该听起来像什么。这就是合成器的工作,它接收高级MIDI数据并将其转换为声音。原则上,是的,你可以通过叠加正弦波来产生任何声音,但在实践中效果不是很好,因为一旦你并行播放几首曲目,它就会变得计算量很大;而且,当你试图重现乐器的真实声音和人类演奏它的表现力时,简单的傅立叶谱(正弦波的相对强度)是不够的。(我已经写了一个简单的合成器来做这件事,所以我知道它很难产生像样的声音)在合成科学上做了很多研究,更广泛地说是DSP (数字信号处理),所以如果你愿意,你当然应该能够找到大量的书籍和网页来阅读它。

此外,这可能只与问题的内容无关,但您可能会对一种称为ChucK的音频编程语言感兴趣。它是由处在编程和音乐的十字路口的人们设计的,你可以通过玩它来对声音合成的当前状态有一个很好的了解。

票数 5
EN

Stack Overflow用户

发布于 2009-01-31 06:49:14

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

正如一位MusicXML客户所说:

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

这里提供了更多信息--XSD和DTD、示例文件、教程、支持的应用程序列表、出版物列表等等--请访问

http://www.makemusic.com/musicxml

MIDI对于标准记法中的简单乐谱来说并不是一个很好的模型。MIDI缺少许多音乐符号的基本概念。它被设计成一种性能格式,而不是一种符号格式。

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

有关捕获同时水平和垂直结构的音乐符号的更直接表示方法,请查看Humdrum格式,它更多地使用电子表格/网格模型。特别是在音乐学和音乐分析应用程序中,它的数据结构工作得特别好。

票数 7
EN

Stack Overflow用户

发布于 2009-02-18 11:53:10

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

听起来你会对LilyPond感兴趣。

关于音乐符号的大多数事情几乎都是纯机械的(甚至对于复杂的、非琐碎的符号部分也有规则和指导原则),而LilyPond在处理所有这些机械方面做得很好。剩下的就是在任何文本编辑器中都很容易编写的输入文件。除了PDF,LilyPond还可以生成Midi文件。

如果你愿意,你可以用一个程序以算法生成文本文件,然后调用LilyPond为你转换成符号和midi文件。

我怀疑你能找到一种比LilyPond的输入文件更完整、更简洁的音乐表达方式。

请理解,音乐和音乐符号不是层次化的,不能(很好地)通过严格遵守层次化思维来建模。Read this获取更多关于该主题的信息。

玩得开心!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/467979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档