2011-03-19 124 views
4

我想制作一个类似于鼓机的音频多音轨音序器。 您认为最好的实现方式是什么?编程音乐音序器

目前我有2个曲目由2个数组表示:2 x [tick,samplePointer]。 我将这两个曲目合并到一个主数组中进行播放[tick,samplePointer],并通过勾选进行排序。 音频回调会触发每个节拍(每个节拍4个节拍)并检查数组中的第一个元素,如果它的节拍等于全局歌曲位置(以节拍为单位),那么我会播放它。 如果我添加或删除2个轨道(阵列)之一的笔记,然后合并两个轨道(数组),并再次排序。

它的工作原理,但我觉得有一个更好的方法来做到这一点。 实施这样一个项目的最佳实践是什么? Logic,Ableton,Cubase,Reason等专业应用如何实施音频/ midi事件列表并管理已播放的内容,需要播放什么内容?

预先感谢您的想法。

回答

5

将需要更多的细节,以便更好地回答你。你在用什么语言?您定位的节奏范围是?你将编程什么样的音频接口(重要的是要知道什么时候你将要处理的延迟)。

此外,它只是一个鼓音序器?或者是更复杂的东西?你打算支持多少“乐器”/“声音”?如果你要支持32个声音,可以有一个[int(tick),int(voices)]的单个数组。每个人的声音都是32位数字。然后要确定一个声音是否正在播放,您只需要将“&”声音标志与阵列中的声音int相对应。这将避免阵列排序/复制/建设。

延迟是一个需要了解的重要问题。如果你有240bpm的实例的节奏,和每拍四“蜱”(说真的,我们在谈论一个度量细分为十六分音符每个节拍):

  • 有每秒4次(240每分钟/60秒节拍) - >每个节拍发生每隔250毫秒 - >每个“嘀”的发生,每62.5毫秒

如果音频接口具有高等待时间(例如,在Windows共享模式WASAPI Vista +的延迟约为30毫秒),你将会有不同的“窗口”需要生成。

如果您正在处理MIDI事件,这变得更加重要,因为您可以在个别滴答声中接收MIDI事件。

我曾与之合作的大多数DAW(数字音频工作站)通常都以两种不同“类型”来考虑世界:音频数据和MIDI数据。音频数据往往更“实时”(或实时,因为你可以得到,因此对于超过3ms的延迟的重要性)。 Midi仍然相当“快节奏”。最终,你可能会想到MIDI数据。

但是,像这样开始一个项目的最好方法是构建一个非常简单的鼓音序器。拿四个鼓和你正在做的东西,然后从那里出发:)。祝你好运!