在AVAudioSession/AVAudioEngine中选择特定输入通道作为USB设备的单声道输入

6za6bjd0  于 2023-04-22  发布在  iOS
关注(0)|答案(1)|浏览(138)

我正在开发一个音频录制应用程序,它使用外部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)
a0x5cqrl

a0x5cqrl1#

你必须像这样在输入节点上做通道Map:

engine.inputNode.auAudioUnit.channelMap = [1, 1]

相关问题