如何将AVAudioEngine连接到Lightning Port音频输入?

时间:2015-01-22 05:01:11

标签: ios audio core-audio avaudioengine

我想把我的电吉他连接到我的应用程序。我有硬件(Line6 Sonic Port)将吉他的音频传递到我的iPhone。我已经想出如何将音频播放到我的耳机,但它的音频来自我的耳机麦克风,而不是闪电端口输入。 如何通过耳机麦克风以编程方式查找Lightning Port音频输入?

这是我到目前为止所尝试的内容:

self.audioEngine = AVAudioEngine()

let input = self.audioEngine.inputNode
let mixer = self.audioEngine.mainMixerNode
let output = self.audioEngine.outputNode

self.audioEngine.inputNode.installTapOnBus(0, bufferSize: 128, format: input.inputFormatForBus(0)) { (buffer, time) -> Void in
    //
}

self.audioEngine.connect(input, to: mixer, format: input.inputFormatForBus(0))
self.audioEngine.connect(mixer, to: output, format: mixer.inputFormatForBus(0))

self.audioEngine.prepare()
self.audioEngine.startAndReturnError(nil)

当我运行时,我会听到音频 - 但它来自我的耳机麦克风,而不是吉他。如何连接来自闪电端口的音频?

为了快速说明,这是我正在使用的硬件: Line6 Sonic Port

2 个答案:

答案 0 :(得分:4)

要连接到特定音频输入,您需要使用sharedInstance方法配置AVAudioSession setPreferredInput:error:

以下是在Objective-C中完成的工作:

AVAudioSession *sharedSession = [AVAudioSession sharedInstance];
NSArray *availableInputs = [sharedSession availableInputs];
[availableInputs enumerateObjectsUsingBlock:^(AVAudioSessionPortDescription *portDescription, NSUInteger idx, BOOL *stop) {
    if (portDescription.portType == AVAudioSessionPortUSBAudio) {
        [sharedSession setPreferredInput:portDescription error:nil];
    }
}];

要了解详情,请查看:

答案 1 :(得分:2)

iOS通常会从插入的最后一个端口路由音频输入和输出。由于您插入耳机,这就是它用于录制的端口。拔下耳机,插上闪电,它将使用该路径进行录音和播放。