【问题标题】:_AVAE_Check: required condition is false: [AVAudioEngine.mm:353:AttachNode: (node != nil)] while creating AKDelay_AVAE_Check:所需条件为假:[AVAudioEngine.mm:353:AttachNode: (node != nil)] 同时创建 AKDelay
【发布时间】:2018-02-01 18:25:50
【问题描述】:

我有一个带有以下代码的最小 MacOS 应用程序(一个视图控制器 + 一个按钮)(基本上是来自 AudioKit's playground 的复制粘贴):

public class Player {

    static let playRate = 2.0
    static let scale = [0, 2, 4, 5, 7, 9, 11, 12]

    var pluckedString: AKPluckedString! = nil
    var delay: AKDelay! = nil
    var reverb: AKReverb! = nil
    var performance: AKPeriodicFunction! = nil

    public init() {
        pluckedString = AKPluckedString()

        delay = AKDelay(pluckedString) // <- objc_exception_throw here
        delay.time = 1.5 / Player.playRate
        delay.dryWetMix = 0.3
        delay.feedback = 0.2

        reverb = AKReverb(delay)

        performance = AKPeriodicFunction(frequency: Player.playRate) {
            var note = Player.scale.randomElement()
            let octave = [2, 3, 4, 5].randomElement() * 12
            if random(0, 10) < 1.0 { note += 1 }
            if !Player.scale.contains(note % 12) { print("ACCIDENT!") }

            let frequency = (note + octave).midiNoteToFrequency()
            if random(0, 6) > 1.0 {
                self.pluckedString.trigger(frequency: frequency)
            }
        }
    }

}

问题是对AKDelay(pluckedString) 的调用会产生ObjC 异常:

AKPluckedString.swift:init(frequency:amplitude:lowestFrequency:):94:Parameter Tree Failed
[avae] AVAEInternal.h:70:_AVAE_Check: required condition is false: [AVAudioEngine.mm:353:AttachNode: (node != nil)]
[General] required condition is false: node != nil
[General] (
    0   CoreFoundation                      0x00007fff49d8d00b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x00007fff7096bc76 objc_exception_throw + 48
    2   CoreFoundation                      0x00007fff49d92da2 +[NSException raise:format:arguments:] + 98
    3   AVFAudio                            0x00007fff4610b75e _Z19AVAE_RaiseExceptionP8NSStringz + 158
    4   AVFAudio                            0x00007fff460ab1a2 _Z11_AVAE_CheckPKciS0_S0_b + 330
    5   AVFAudio                            0x00007fff4611f2e7 _ZN17AVAudioEngineImpl10AttachNodeEP11AVAudioNodeb + 63
    6   AVFAudio                            0x00007fff4611f267 -[AVAudioEngine attachNode:] + 67
    7   AudioKit                            0x000000010051de01 globalinit_33_0214DCBA62A4B4A95DF14CC0DE6A86C6_func60 + 13249
    8   AudioKit                            0x000000010051f24d globalinit_33_0214DCBA62A4B4A95DF14CC0DE6A86C6_func60 + 18445
    9   AudioKit                            0x0000000100512284 block_copy_helper.12 + 4852
    10  AudioKit                            0x0000000100519119 block_copy_helper.12 + 33161
    11  AudioKit                            0x0000000100639e8f block_copy_helper.12 + 38463
    12  AudioKit                            0x00000001006397ca block_copy_helper.12 + 36730
...

我该如何解决这个问题?

我正在使用 AudioKit 4.0.4 / Swift 4.0.3 / XCode 9.2 (9C40b)。

【问题讨论】:

  • 我运行你的代码没有任何崩溃。您收到的错误消息看起来像是未设置 Audiokit.output 的错误。你什么时候调用 AudioKit.start()?它需要在 Audiokit.output = player.reverb (或其他)之后。
  • 这就是它非常奇怪的原因。操场上的相同代码可以正常工作。到目前为止,我能弄清楚的是,在 AKPluckedString 中(实际上,在其超类 AKNode 中)以某种方式调用 AVAudioNode() 返回一个零指针。不过,CoreAudio 没有给出任何理由或错误。

标签: swift macos audiokit


【解决方案1】:

是因为你的 App Sandbox 开启了吗?我的 Xcode (9.2) 在(项目的功能选项卡)上默认为 App Sandbox。这会导致 AudioKit 出现此错误。

【讨论】:

  • 是的!这就是原因(捂脸)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2019-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
相关资源
最近更新 更多