如何将 AVAudioEngine 连接到 Lightning Port 音频输入?
Posted
技术标签:
【中文标题】如何将 AVAudioEngine 连接到 Lightning Port 音频输入?【英文标题】:How do I connect AVAudioEngine to a Lightning Port audio input? 【发布时间】:2015-03-20 19:39:49 【问题描述】:我想将我的电吉他连接到我的应用。我有硬件(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)
当我运行它时,我听到了音频 - 但它来自我的耳机麦克风,而不是吉他。如何连接来自 Lightning 端口的音频?
为了快速说明,这里是我正在使用的硬件:
【问题讨论】:
我之前没用过AVAudioEngine。我也没有使用过 Line6 声波端口 - 任何一个都可以。我在 Apogee Jam 中使用了早期的 Core Audio 框架,并且在连接时它“正常工作”。耳机是否连接到 Sonic 端口(我看到侧面有一个插孔)?你能改变输入节点上的输入节点/设置吗? 您的输入设备是否显示在AVAudiosession.availableInputs
中?
【参考方案1】:
要连接到特定的音频输入,您需要使用setPreferredInput:error:
方法配置AVAudioSession
的sharedInstance
。
这是在 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];
];
要了解更多信息,请查看:
AVAudioSession documentation Technical Q&A QA1799: AVAudioSession - Microphone Selection【讨论】:
【参考方案2】:iOS 通常会从插入的最后一个端口路由音频输入和输出。由于您插入了耳机,因此它就是用于录制的端口。拔下耳机,插上闪电,它会使用该路径进行音频录制和播放。
【讨论】:
以上是关于如何将 AVAudioEngine 连接到 Lightning Port 音频输入?的主要内容,如果未能解决你的问题,请参考以下文章
iOS8 AVAudioEngine 如何将麦克风输入路由到(底部)扬声器输出?
AVAudioEngine.connect 上的 CoreAudio 错误和崩溃
将AVAudioSourceNode连接到AVAudioSinkNode不起作用