ios - AudioKit "disconnected state"与链中节点的创建顺序相关的崩溃

标签 ios swift audiokit

我使用 AudioKit 遇到此崩溃*** 由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“播放器在断开连接状态下启动” 这种情况发生在我按一个顺序创建并添加节点,但当我按另一种顺序添加它们时不会发生。这是所需的链:

[播放器]->[助推器1]->[混音器1]->[助推器2]->[混音器2]->[峰值限制器]->[输出]

当我按照这个顺序构建它时,它崩溃了:

let mixer2 = AKMixer()

let peakLimiter = AKPeakLimiter(mixer2)

AudioKit.output = peakLimiter
AudioKit.start()

let mixer1 = AKMixer()

let booster2 = AKBooster(mixer1)
mixer2.connect(input: booster2)

let booster1 = AKBooster(player)
mixer1.connect(input: booster1)

player.play()

但是当我按照这个顺序构建它时,它可以工作:

let booster1 = AKBooster(player)

let mixer1 = AKMixer()
mixer1.connect(input: booster1)

let booster2 = AKBooster(mixer1)

let mixer2 = AKMixer()
mixer2.connect(input: booster2)

let peakLimiter = AKPeakLimiter(mixer2)

AudioKit.output = peakLimiter
AudioKit.start()

player.play()

有什么想法吗?由于应用程序中的动态原因,第一个示例(崩溃)是它所需的创建顺序。

同样奇怪的是,如果我使用第一个创建顺序示例并省略第二个助推器,它就会起作用。 [播放器]->[助推器1]->[混音器1]->[混音器2]->[峰值限制器]->[输出]

let mixer2 = AKMixer()

let peakLimiter = AKPeakLimiter(mixer2)

AudioKit.output = peakLimiter
AudioKit.start()

let mixer1 = AKMixer()
mixer2.connect(input: mixer1)

let booster1 = AKBooster(player)
mixer1.connect(input: booster1)

player.play()

最佳答案

您可以尝试在播放之前(但在所有连接之后)移动输出开始 :

AudioKit.output = peakLimiter
AudioKit.start()
player.play()

关于ios - AudioKit "disconnected state"与链中节点的创建顺序相关的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47849402/

相关文章:

ios - 用户更改角色后如何重新加载选项卡栏项目

ios - 如何让uislider像apple music一样

ios - 从特定点启动 AKSequencer

ios - 尝试合并 2 个 Audiokit 示例 : MicrophoneAnalysis and Recorder: crashes when I hit record

javascript - 如何在 swift 中实现 Pubnub Access Manager

ios - Swift 4.0编译的模块无法导入Swift 3.2.2 : AudioKit

ios - 在 UITableView 中显示 NSMutableArray

ios - 从设备中删除应用程序时删除与应用程序相关的下载

ios - WKInterfaceTable 和 setNumberOfRows 崩溃 "unexpectedly found nil while unwrapping an Optional value"

ios - 具有圆角半径和阴影的 SWIFT UITableViewCell