【发布时间】:2018-12-28 22:08:34
【问题描述】:
我正在开发一个适用于不同音频片段的 iOS 应用程序。每段音频都与一个单独的按钮相关联(类似于您在音板应用中看到的那种功能)。
在一个简单的音板应用程序中,您有一个播放器对象(AVAudioPlayer 或 AVAudioEngine 播放器节点)的实例,只要按下按钮就会触发该实例。
如果你按下buttonOne,那么sound1 就会播放。
如果您在sound1 仍在播放时再次按下buttonOne,则当前实例将被中断并“替换”为从开头重新开始的sound1 的新实例。
如果你推buttonOne,THEN 在sound1 完成之前推buttonTwo,sound1 的实例被中断并替换为sound2,再次从头播放。
假设您尝试在两种声音之间启用交叉淡入淡出。您可以只创建两个播放器实例,将第一个声音加载到player1,第二个加载到player2,然后在它们之间进行淡入淡出。
在此基础上,假设您尝试让不同的声音组合同时播放。要么是大量声音(可能是整个音板)都可以播放而不会相互干扰的想法。或者,也许,能够同时播放多个声音,例如sound1 是一张音乐床,sound2...soundXX 是音效,应该可以在音乐床上播放而不会打断它。
问题:在这种情况下管理播放器实例的最佳设计策略是什么?假设您的音板中有一个 5 x 5 的按钮网格。如果假设您应该能够同时播放所有 25 个声音,那是否需要您在设置时初始化 25 个播放器实例? (这似乎非常反 DRY 并且不是特别有效)。或者是否有某种方法可以动态管理您需要的实例数量(可能使用惰性变量?)以便仅根据需要生成其他实例,例如当您播放 x 个声音并开始另一个声音时,会生成一个额外的实例来包含新添加的声音?
【问题讨论】:
标签: ios swift audio avaudioplayer audio-player