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