有没有办法在AVAudioSession中获得像availableInputs这样的可用输出

时间:2015-10-20 13:28:51

标签: ios xcode avaudiosession

我需要列出可用的输出(如BleutoothLE,HeadPhones,BuiltInReceiver),但我只能访问currentRoute的输出。

任何人都可以访问所有可用的输出,请分享评论吗?

提前致谢..

3 个答案:

答案 0 :(得分:2)

据我所知,你有两个选择:

  • 在您的视图中添加showsVolumeSlider,并将showsRouteButton设置为0并将overrideOutputAudioPort设置为1.这将在系统中提供一个用户可以从中选择的图标输出。

  • AVAudioSession有一个非常有限的[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; 方法,可以将音频路由到内置扬声器。

    {{1}}

答案 1 :(得分:0)

我不知道为什么没有简单的availableOutputs属性。

但您可以使用多路音频类别并检查当前路线的输出来获取所有可用输出的列表:

let sesh = AVAudioSession()
try! sesh.setCategory(AVAudioSessionCategoryMultiRoute)
try! sesh.setActive(true)

print("available outputs: \(sesh.currentRoute.outputs)\n")

输出(和输入)来来往往,导致路线变化,因此订阅路线变更通知:

NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: "routeChanged:",
    name: AVAudioSessionRouteChangeNotification,
    object:nil
)

NB :多路线类别有很多关于何时直观可用的输入/输出实际可用的规则(例如,扬声器不“可用”如果您插入了USB声卡,但有线耳机将是。)

你想做什么?我使用多路来播放4声道音频,但我不确定你是否真的可以在输出之间进行混音和匹配。

答案 2 :(得分:-2)

使用AVAudioSession's currentRoute获取所有输出的列表:

AVAudioSession *session = [AVAudioSession sharedInstance];
NSLog(@"Outputs: %@", [[session currentRoute] outputs]);