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

Posted

技术标签:

【中文标题】当 AKMicrophone 存在时,来自 AKMIDISampler 的连续正弦波【英文标题】:Continuous Sine Wave From AKMIDISampler when AKMicrophone is Present 【发布时间】:2018-11-30 18:50:37 【问题描述】:

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

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

请注意,如果 AKMicrophone 相关代码全部静音,则 AKMIDISampler 可以正常播放,并且当前困扰我的正弦波不会发生。

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

仅供参考:我在 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】:

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

似乎在 AudioKit.start() 之后将文件加载到采样器中可以修复 Sine Wave of Terror!

//..
    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")
    

【讨论】:

以上是关于当 AKMicrophone 存在时,来自 AKMIDISampler 的连续正弦波的主要内容,如果未能解决你的问题,请参考以下文章

AudioKit AKMicrophone 不输出任何数据

akm伺服错误代码524、526代表啥意思

阿克曼(Ackmann)函数

AK5703的ALC

当存在多个虚拟主机标签时,Apache 2.4.7 重定向不起作用 Ubuntu14.04

HAL