Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 同时使用AudioKit和SpriteKit audio_Ios_Audio_Sprite Kit_Audiokit - Fatal编程技术网

Ios 同时使用AudioKit和SpriteKit audio

Ios 同时使用AudioKit和SpriteKit audio,ios,audio,sprite-kit,audiokit,Ios,Audio,Sprite Kit,Audiokit,我正在制作一个游戏,它使用AudioKit框架来检测麦克风接收到的声音频率。我的设置如下: import SpriteKit import AudioKit class GameScene: SKScene { var mic : AKMicrophone! var tracker : AKFrequencyTracker! var silence : AKBooster! let mixer = AKMixer() override func did

我正在制作一个游戏,它使用AudioKit框架来检测麦克风接收到的声音频率。我的设置如下:

import SpriteKit
import AudioKit

class GameScene: SKScene {
    var mic : AKMicrophone!
    var tracker : AKFrequencyTracker!
    var silence : AKBooster!
    let mixer = AKMixer()

    override func didMove(to view: SKView) {
       mic = AKMicrophone()
       tracker = AKFrequencyTracker.init(mic)
       silence = AKBooster(tracker, gain: 0)
       mixer.connect(silence)
       AudioKit.output = mixer
       AudioKit.start()
    }
}
        let session = AVAudioSession()

    do {
        try session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch {
        print("error setting output")
    }
我也想使用SKAction.PlayAudioFileName来播放音效等,但使用它时,播放音量非常低。我假设它与场景的混合器节点和AKMixer有关?使用AudioKit播放声音文件比我需要的复杂得多


我需要对场景进行扩展吗?非常感谢您的帮助

Aurelius似乎是正确的,因为AudioSession输出路径被定向到耳机。我仍然不确定为什么会出现这种情况,但覆盖和设置输出的工作原理如下:

import SpriteKit
import AudioKit

class GameScene: SKScene {
    var mic : AKMicrophone!
    var tracker : AKFrequencyTracker!
    var silence : AKBooster!
    let mixer = AKMixer()

    override func didMove(to view: SKView) {
       mic = AKMicrophone()
       tracker = AKFrequencyTracker.init(mic)
       silence = AKBooster(tracker, gain: 0)
       mixer.connect(silence)
       AudioKit.output = mixer
       AudioKit.start()
    }
}
        let session = AVAudioSession()

    do {
        try session.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch {
        print("error setting output")
    }

这需要在初始化AudioKit组件后完成。如果有更好的方法,请告诉我

事实上,我刚刚用耳机测试过,使用SKAction.playAudioFileName的音量是正常的。它一定与反馈保护或其他什么有关?也许音频被传送到了错误的扬声器?我不确定这一点,但有些人提到音频可以改为路由到铃声扬声器?也许AudioKit使主扬声器无法使用,所以sprite kit尽了最大努力?你说得对!真不敢相信,当耳机没有插上时,我没有注意到它是通过手机的听筒而不是扬声器传输的。有没有办法将SKScene的音频显式连接到AKMixer?我可能在看类似的东西,但我得到了错误:var sceneudio=AKNode;sceneAudio.avAudioNode=场景?.audioEngine.mainMixerNode;mixer.connectsceneAudioERROR:[0x1abca6c40]>avae>AVAudioEngine.mm:404:ConnectMultipleOutput:所需条件为false:[\u nodes containsObject:sourceNode]2017-01-06 11:49:20.456297 MicAnalysisGame[2096:470307]***由于未捕获的异常“com.apple.coreaudio.avfaudio”,终止应用程序,原因:“所需条件为false:[\u节点包含对象:sourceNode]'