用于合成音乐数据的 OS X 框架是什么?

What is the OS X framework(s) for synthesizing music data?

我想编写一些代码来生成一些非常简单的音调(音符)并通过扬声器(无论是什么声音设备)输出它们。

我怀疑我可能需要生成 MIDI 数据,我可以独立弄清楚,但我通常是音频编程的新手,我不确定进入系统框架的最佳入口点是什么是。 AudioToolbox 有这些 MusicSequence 个对象。还有核心 MIDI 和核心音频。 None 有一个明显的 "here's a data structure for a bunch of notes, now call this method to play them" 接口,所以我大概需要将它们组合起来拼凑起来。

我相信 OS X 支持这一点。如果有人了解此类工作的背景,我会很感激一些基本的指示,这些指示是关于在文档(或其他资源)中的何处开始寻找构建代表音乐数据的任何结构以及您将在何处转身并触发播放。

OS X 确实支持这一点,但它在本质上比乍看起来要复杂得多。基本上分为三部分:

  • MusicSequence 是 "data structure for a bunch of notes"(以及 tempo/meter 映射形式的时间信息。
  • MusicPlayer 是控制 MusicSequence 播放的对象。
  • AUGraph 是您用来创建乐器对象并将其连接到物理输出以将音符数据转换为声音的工具。

设置 AUGraph 的方式有很多潜在的变化。例如,默认的通用 MIDI 合成器是内置的 DLSMusicDevice,但您也可以加载 FM 合成器、采样器或任意数量的其他乐器单元。从那里,您可以以各种方式处理音频并将其路由到各种设备。所有属于 "audio processing" 一般类别的内容都发生在 AUGraph 中。

Apple 的 PlaySequence 示例代码可以满足您的大部分需求。这是一个 C++ 项目,但 MusicSequence、MusicPlayer 和 AUGraph 是纯 C API,因此它应该是一个不错的起点。 https://developer.apple.com/library/mac/samplecode/PlaySequence/Introduction/Intro.html