iOS如何将USB设备的特定通道设置为音频播放器? AVFoundation

我正在使用AVAudioplayer和AVAudiosession。 我有一个iPad和一个音频接口(声卡)。

这个音频接口有4个输出(2个立体声),一个闪电线,它从iDevice接收能量,效果很好。

我编写了一个简单的play()stop()AVAudioplayer工作正常但我需要设置音频接口的特定通道(1-2和3-4)。 我的想法是向每个输出/通道(1-2或3-4)发送两个音频(A和B)

我已经阅读了AVAudioplayer的文档,它说: channelAssignments用于播放器的asign通道。

问题是:我创建了一个AVAudiosession,可以插入USBport设备的数据(声卡)。 我得到了:

 let route = AVAudioSession.sharedInstance().currentRoute for port in route.outputs { if port.portType == AVAudioSessionPortUSBAudio { let portChannels = port.channels let sessionOutputs = route.outputs let dataSource = port.dataSources dataText.text = String(portChannels) + "\n" + String(sessionOutputs) + "\n" + String(dataSource) } } 

记录: 输出

我必须采取哪些数据并使用play()发送音频?

哇 – 自从AVPlayer在iOS 4中问世以来,我根本不知道AVAudioPlayer已经开发了。然而,我们在2016年, AVAudioPlayer拥有channelAssignments而花哨的流媒体, AVPlayer播放字幕的video则没有

但我认为你不能通过一个AVAudioPlayer播放两个文件AB ,因为每个播放器只能打开一个文件。 离开了

  1. 创建两个玩家( player(A)player(B) )并将每个player(B)channelAssignments设置为音频设备输出通道的一半,处理同步玩家的乐趣, 或者

  2. 创建一个四通道文件AB ,并通过一个播放器播放,为上面找到的完整四个通道分配channelAssignments ,处理略微非标准音频文件的乐趣。

完整性检查:你的session.outputNumberOfChannels返回4吗?

就个人而言,当我做这种事情时,我创建了一个4通道远程io音频单元,因为我发现更高级别的API会在你做任何有点不寻常的事情时引起太多的心痛。 我也使用AVAudioSessionCategoryMultiRoute因为我没有任何> 2声道声卡,所以我必须拼凑耳机插孔加USB声卡才能获得4个声道,但你不应该需要这个。

尽管没有程序输出(如remoteIO音频单元),您也可以使用AVAudioEngine来执行您想要的操作。