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

时间:2018-11-30 18:50:37

标签: ios audio audiokit

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

我用下面最少的代码重复了这个问题。初始化类然后调用playTestSample()时会发生问题。

请注意,如果所有与AKMicrophone相关的代码均已静音,则AKMIDISampler可以正常播放,并且不会困扰当前困扰我的梦想的正弦波。

(我试图切换到使用AKSampler()只是为了查看问题是否在那里,但我无法从中听到任何声音)。

Fyi:我在info.plist的“必需的背景模式”中有“应用程序使用AirPlay播放音频或流音频/视频”的信息-可以解决另一个正弦波问题。

非常感谢您的协助。

顺便说一句:AudioKit摇摇欲坠,并为该项目提供了巨大帮助! :^)

AK 4.5.4 Xcode 10.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)
    }
}

1 个答案:

答案 0 :(得分: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")
    }