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

时间:2016-05-30 21:32:23

标签: ios audio avfoundation avaudioplayer avaudiosession

我正在使用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)
    }
}

日志: outputs

我必须使用哪些数据来发送带有play()的音频?

1 个答案:

答案 0 :(得分:0)

哇 - 自从{4}}出现在iOS 4之后,我根本不知道AVAudioPlayer已经开发了。但是我们在2016年,AVPlayerAVAudioPlayer虽然花哨的流媒体,带有字幕channelAssignments的视频播放不是

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

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

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

  3. 完整性检查:您的channelAssignments返回4?

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

    尽管没有程序输出(如remoteIO音频单元),您也可以使用AVAudioSessionCategoryMultiRoute做你想做的事。