同一时刻触发许多短音效时,可播放的声道数量可能有限。明确接收、拒绝和替换规则,有助于解释某个声音为何消失,也能区分容量不足与音效素材本身的问题。
以下是一组输入完整的独立案例。先读清规则,再按时间或操作顺序记录中间状态;遇到与预期不同的结果时,检查首次出现差异的位置。案例使用明确限定的教学模型,不假定所有作品都采用相同的处理方式。
规则和原始数据
本例容量固定,优先级数值越大越重要;有空位直接接收,满位时只允许严格高于最低优先级的新音效替换。最低级并列时替换最早进入者;没有自然结束事件,音效编号唯一。
最多同时播放4个音效,初始为空 按编号递增请求优先级[1, 0, 2, 6, 2, 2, 3, 0, 4, 3, 6, 0, 3, 5]
逐步记录
请求0优先级1:接收,未替换旧声道;当前[编号,优先级]为[[0, 1]]。
请求1优先级0:接收,未替换旧声道;当前[编号,优先级]为[[0, 1], [1, 0]]。
请求2优先级2:接收,未替换旧声道;当前[编号,优先级]为[[0, 1], [1, 0], [2, 2]]。
请求3优先级6:接收,未替换旧声道;当前[编号,优先级]为[[0, 1], [1, 0], [2, 2], [3, 6]]。
请求4优先级2:接收并替换音效1;当前[编号,优先级]为[[0, 1], [2, 2], [3, 6], [4, 2]]。
请求5优先级2:接收并替换音效0;当前[编号,优先级]为[[2, 2], [3, 6], [4, 2], [5, 2]]。
请求6优先级3:接收并替换音效2;当前[编号,优先级]为[[3, 6], [4, 2], [5, 2], [6, 3]]。
请求7优先级0:拒绝,保留已有声道;当前[编号,优先级]为[[3, 6], [4, 2], [5, 2], [6, 3]]。
请求8优先级4:接收并替换音效4;当前[编号,优先级]为[[3, 6], [5, 2], [6, 3], [8, 4]]。
请求9优先级3:接收并替换音效5;当前[编号,优先级]为[[3, 6], [6, 3], [8, 4], [9, 3]]。
请求10优先级6:接收并替换音效6;当前[编号,优先级]为[[3, 6], [8, 4], [9, 3], [10, 6]]。
请求11优先级0:拒绝,保留已有声道;当前[编号,优先级]为[[3, 6], [8, 4], [9, 3], [10, 6]]。
请求12优先级3:拒绝,保留已有声道;当前[编号,优先级]为[[3, 6], [8, 4], [9, 3], [10, 6]]。
请求13优先级5:接收并替换音效9;当前[编号,优先级]为[[3, 6], [8, 4], [10, 6], [13, 5]]。
共接收11次,替换7次,最后仍在播放[[3, 6], [8, 4], [10, 6], [13, 5]]。
交叉核对与应用
每次处理前列出最低级候选和进入顺序,再验证替换对象。拒绝的请求不能占用新声道;结果声道数不得超过容量,仍在播放的编号不能重复。
本例让声道一直占用到被替换,便于单独研究竞争规则。真实系统还会因素材播放结束、手动停止或淡出而释放声道,加入这些事件后应按明确时间顺序重新推演。
建议保留原始输入、每一步状态和最终输出,再只改变一个条件做对照。重点检查空输入、相等边界、重复请求以及先后顺序;把规则约定、计算过程和显示表现分别核对,比只比较最后一个数字更容易找到原因。
