iOS如何设置USB设备到音频播放器的特定通道?基金会

san*_*Dev 5 audio avfoundation avaudioplayer ios avaudiosession

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

该音频接口具有4个输出(2个立体声)和一根避雷线,它从iDevice接收能量,效果极佳。

香港专业教育学院编码一个简单的play()stop()AVAudioplayer可以正常工作,但我需要分配音频接口的特定通道(1-2和3-4)。我的想法是向每个输出/通道(1-2或3-4)发送两个音频(A和B)

我已经阅读了AVAudioplayer的文档,上面写着:channelAssignments用于为音频播放器分配频道。

问题是:我创建了一个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)
    }
}
Run Code Online (Sandbox Code Playgroud)

日志: 输出

我必须获取和使用哪些数据来发送音频play()

Rhy*_*man 0

哇 - 我根本不知道自从iOS 4 推出AVAudioPlayer以来就已经开发出这个功能了。然而我们现在已经是 2016 年了,虽然有华丽的流媒体播放,但带字幕的视频播放却没有AVPlayerAVAudioPlayerchannelAssignmentsAVPlayer

但我不认为你能够播放两个文件AB通过一个AVAudioPlayer文件,因为每个玩家只能打开一个文件。那留下

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

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

健全性检查:您session.outputNumberOfChannels返回的是 4 吗?

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

尽管没有程序输出(如 RemoteIO 音频单元),您也可以使用它AVAudioEngine来做您想做的事情。