我正在开发一个音频录制应用程序,它使用外部USB音频接口(例如,Focusrite Scarlett Solo)连接到iPhone。
当我运行AVAudioSession.sharedInstance().currentRoute.inputs
时,它正确地返回了接口。
通道也正确返回。
po AVAudioSession.sharedInstance().currentRoute.inputs.first?.channels
▿ Optional<Array<AVAudioSessionChannelDescription>>
▿ some : 2 elements
- 0 : <AVAudioSessionChannelDescription: 0x283070b60, name = Scarlett Solo USB 1; label = 4294967295 (0xffffffff); number = 1; port UID = AppleUSBAudioEngine:Focusrite:Scarlett Solo USB:130000:1,2>
- 1 : <AVAudioSessionChannelDescription: 0x283070b70, name = Scarlett Solo USB 2; label = 4294967295 (0xffffffff); number = 2; port UID = AppleUSBAudioEngine:Focusrite:Scarlett Solo USB:130000:1,2>
当我将inputNode
连接到AVAudioEngine
中的mainMixerNode
时,它使用多通道输入,因此Line/Instrument输入在右通道上,麦克风输入在左通道上。
我怎样才能使它,使我只使用第二通道(吉他)作为单声道播放两个扬声器?
我一直在寻找通过一些文件和讨论,但无法找到答案。
我试着在音频格式中将通道更改为1,但正如预期的那样,它在单声道中播放第一个通道,但我不能选择第二个通道来播放。
let input = engine.inputNode
let inputFormat = input.inputFormat(forBus: 0)
let preferredFormat = AVAudioFormat(
commonFormat: inputFormat.commonFormat,
sampleRate: inputFormat.sampleRate,
channels: 1,
interleaved: false
)!
engine.connect(input, to: engine.mainMixerNode, format: preferredFormat)
编辑:如要求,我添加通道Map代码
let input = engine.inputNode
let inputFormat = input.inputFormat(forBus: 0)
engine.mainMixerNode.auAudioUnit.channelMap = [1]
engine.connect(input, to: engine.mainMixerNode, format: inputFormat)
1条答案
按热度按时间a0x5cqrl1#
你必须像这样在输入节点上做通道Map: