【问题标题】:Best strategy for managing audio instances to allow cross-fades, etc管理音频实例以允许交叉淡入淡出等的最佳策略
【发布时间】:2018-12-28 22:08:34
【问题描述】:

我正在开发一个适用于不同音频片段的 iOS 应用程序。每段音频都与一个单独的按钮相关联(类似于您在音板应用中看到的那种功能)。

在一个简单的音板应用程序中,您有一个播放器对象(AVAudioPlayer 或 AVAudioEngine 播放器节点)的实例,只要按下按钮就会触发该实例。

如果你按下buttonOne,那么sound1 就会播放。

如果您在sound1 仍在播放时再次按下buttonOne,则当前实例将被中断并“替换”为从开头重新开始的sound1 的新实例。

如果你推buttonOne,THEN 在sound1 完成之前推buttonTwosound1 的实例被中断并替换为sound2,再次从头播放。

假设您尝试在两种声音之间启用交叉淡入淡出。您可以只创建两个播放器实例,将第一个声音加载到player1,第二个加载到player2,然后在它们之间进行淡入淡出。

在此基础上,假设您尝试让不同的声音组合同时播放。要么是大量声音(可能是整个音板)都可以播放而不会相互干扰的想法。或者,也许,能够同时播放多个声音,例如sound1 是一张音乐床,sound2...soundXX 是音效,应该可以在音乐床上播放而不会打断它。

问题:在这种情况下管理播放器实例的最佳设计策略是什么?假设您的音板中有一个 5 x 5 的按钮网格。如果假设您应该能够同时播放所有 25 个声音,那是否需要您在设置时初始化 25 个播放器实例? (这似乎非常反 DRY 并且不是特别有效)。或者是否有某种方法可以动态管理您需要的实例数量(可能使用惰性变量?)以便仅根据需要生成其他实例,例如当您播放 x 个声音并开始另一个声音时,会生成一个额外的实例来包含新添加的声音?

【问题讨论】:

    标签: ios swift audio avaudioplayer audio-player


    【解决方案1】:

    在这种情况下管理 AVAudioPlayer 实例的最佳设计策略是什么

    没有。您应该使用 AVAudioEngine。这正是它的本质,一个音板/补丁套件。

    或者有什么方法可以动态管理你需要的实例数量

    如果我有一个事物的 25 个有序实例,其中一种可能性根本没有实例,那听起来像是一个可选数组。

    【讨论】:

    • 谢谢-我已经修改以反映您的建议,但这并不是我真正要问的。无论是 AVAudioPlayer 播放器对象还是 AVAudioEngine 节点,问题是管理实例的最佳方式是什么。在您的 iOS 12 书中(我都有!;)您设置了 2 个播放器实例、2 个文件变量、2 个 url 变量等,而我要问的是 - 如果我必须管理潜在的 N 个播放器实例给定的时刻,最好的策略是什么?听起来如果有(N-1)个声音在播放,我添加了另一个,我正在查看为最后一个实例动态生成 playerN、fileN、urlN?
    • 换句话说,如果我的音板上有 25 个按钮,我最好只为每个按钮分配一个 AVAudioEngine 节点吗?这似乎不是很有效,但如果它打算成为一个补丁托架套件,也许这是处理它的最简单方法?
    • 所以问题实际上是关于“或者有什么方法可以动态管理您需要的实例数量”?你的意思是像一个可选的? (这个按钮要么有声音,要么没有。)
    • 是的,我认为这就是问题所在。 AVAudioEngine 对我来说是新的, AVAudioPlayer 不是很多,但从编程的角度来看,这是同一个问题 - a) 从编程的角度来看,在大多数情况下声明可能有 25 个音频变量实例(每个按钮一个)似乎很奇怪不太可能需要超过 2 个(2 个播放曲目之间的基本交叉淡入淡出)或 4-5 个(音乐床加上,比如说,一些一次性命中),但是 b)我不想强加一个任意的“复调" 限制为只有 8 个实例可供使用。
    • 我正在考虑的另一种方式是表格单元格在滚动出屏幕时如何排队/出列 - 这里是否有一个类比,即应用程序可以使用 X 个播放器实例,并且特定按钮的输出被分配给下一个可用的播放器实例,或者最近“销毁”的那个?
    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2020-07-12
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多