文本阅读:
84第4章自动化与单音管理
为了处理这类情形,我们可以为开始一个音符(或者更一般地,一个任务)的消息加入个或多个标签(Tag)。这个标签是我们可以日后用来确认任务的数据的任意集合,随后我们可以用它来搜索分配给它的单音。
仍以图4.10为例,在这里列出了将这4个任务写成一个控制流的一种方法:
开始时间结束时间音高
在这种表示方法中,我们不需要标签,因为每一个消息(每一行文字)已经包含了我们需要指明整个任务的所有信息。(这里我们假设任务a到d实际上是音高分别为60、62、64和65的音符。)事实上我们正在把每个任务表示为一个控制流中的一个单一的事件(章节3.3)。
另一方面,如果假设现在我们不能提前知道每个音符的长度,那么更好的一种表示方法是:
astart(开始)60...
start
62....
end(结束)
start
64......
start 65...
end
这里每个音符都被分成两个分立的事件,分别表示该音符的开始和结束。标记a、b、c、d用来作为标签;我们知道哪个开始与哪个结束是相匹配的,因为它们的标签是相同的。请注意,标签根本不需要与用来播放每个音符的单音相关联。
MIDI标准并不支持标签。在通常的应用中,一个音符的音高就起到了其标签的作用(因此标签是一直被再利用的)。如果具有相同音高的两个音符必须要分开处理的话(比如为了让两者的音高分别滑向不同的方向),那么(除了音符以外)MIDI通道也可以用来作为标签。
在实时音乐软件中,通常需要在"每个任务一个事件"与上述的标签表示之间来回游走,因为第一种表示更适合存储和图形化编辑,而第二种表示通常更适合实时操作。