存在 AKMicrophone 时来自 AKMIDISampler 的连续正弦波

Continuous Sine Wave From AKMIDISampler when AKMicrophone is Present

当存在已初始化的 AKMicrophone 时,我在项目中使用 AKMIDISampler 时遇到问题。除了在采样器上调用“播放”时正确播放木版样本外,第一次“播放”被称为恒定正弦波开始播放 - 它永远不会停止。

我已经用下面最少量的代码复制了这个问题。当初始化 class 然后调用 playTestSample() 时会发生问题。

请注意,如果与 AKMicrophone 相关的代码全部静音,AKMIDISampler 可以正常播放,并且不会出现目前困扰我梦想的正弦波。

(我尝试切换到使用 AKSampler() 只是为了看看问题是否存在,但我无法从中得到任何声音)。

Fyi:我在 info.plist 的“所需背景模式”中有“应用程序使用 AirPlay 播放音频或流媒体 audio/video”——这可以解决另一个正弦波问题。

非常感谢您的帮助。

顺便说一句:AudioKit 非常棒,对这个项目提供了巨大的帮助! :^)

AK 4.5.4 Xcode10.1

import Foundation
import AudioKit

class AudioKitTESTManager {

    var mixer = AKMixer()

    var sampler = AKMIDISampler()

    var mic = AKMicrophone()
    var micMixer = AKMixer()
    var micBooster = AKBooster()

    init() {

        mixer = AKMixer(sampler, micBooster)

        do {
            let woodblock = try AKAudioFile(readFileName: RhythmGameConfig.woodblockSoundName)

            try sampler.loadAudioFiles([woodblock])

        } catch {
            print("Error loading audio files into sampler")
        }


        micMixer = AKMixer(mic)

        micBooster = AKBooster(micMixer)
        micBooster.gain = 0.0


        AudioKit.output = mixer

        AKSettings.playbackWhileMuted = true
        AKSettings.defaultToSpeaker = true
        AKSettings.sampleRate = 44100

        do {
            print("Attempting to start AudioKit")
            try AudioKit.start()
        } catch {
            AKLog("AudioKit did not start!")
        }
    }

    func playTestSample() {
        // You hear the sample and a continuous sine wave starts playing through the samplerMixer
        try? sampler.play(noteNumber: 60, velocity: 90, channel: 1)
    }
}

哇哦。我相信我已经找到了解决方案。也许它会帮助别人?

似乎在 AudioKit.start() 之后将文件加载到采样器中修复了恐怖的正弦波!

//..
    do {
        print("Attempting to start AudioKit")
        try AudioKit.start()
    } catch {
        AKLog("AudioKit did not start!")
    }


    do {
        let woodblock = try AKAudioFile(readFileName: RhythmGameConfig.woodblockSoundName)

        try sampler.loadAudioFiles([woodblock])

    } catch {
        print("Error loading audio files into sampler")
    }