iOS 无法在扬声器上播放并将 Audio Session 设置为录制

标签 ios audio record playback

所需功能:1) 插入耳机时通过耳机播放音频,2) 未插入耳机时通过扬声器播放音频,以及 3) 通过耳机或内置麦克风录制音频。

为了让它在扬声器和耳机上播放音频,我使用以下 Audio Session 类型:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error: &setCategoryError];

然后创建音频播放器实例。这非常适合在插入耳机时通过耳机播放音频,在不插入时通过扬声器播放音频,直到我尝试录制。

录制时,我首先将 Audio Session 设置为AVAudioSessionCategoryPlayAndRecord,然后尝试使用Novicane 进行录制。有时这会成功,但有时应用程序崩溃,没有堆栈跟踪或调试器指示,并给出 AUIOClient_StartIO 错误。

我对这个错误的谷歌搜索表明我需要始终保持 session AVAudioSessionCategoryPlayAndRecord。这似乎确实避免了 AUIOClient_StartIO 错误的发生。

但是每当我使用 AVAudioSessionCategoryPlayAndRecord 进行播放时,它就会开始从内置耳机而不是扬声器播放。

我知道我可以覆盖扬声器的音频输出 channel (例如 https://stackoverflow.com/a/1064941/895876 ),但是插入耳机后不会自动切换到耳机音频。

如何获得所有这三个功能?

最佳答案

您必须使用 AUHAL 单元将特定输入设备设置为默认输入,然后将其与 AudioQueue 连接。

查看 this苹果技术。注意,它可能对你有帮助..

如果这不起作用尝试 AVAudioSession 使用 setPreferredInput:

这是我的后脑勺,根据我最近读到的一些东西,我实际上没有尝试过,但知道其他人成功地尝试过。

祝你好运。

关于iOS 无法在扬声器上播放并将 Audio Session 设置为录制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22503985/

相关文章:

ios - 像 Mail App 这样的 UITextView 的滑动/拖动手势

jquery - 播放音频文件时未禁用按钮

android - 在 Android root 手机上捕获系统音频

swift - 快速播放顺序音频文件

entity - 微软动态客户关系管理。获取当前记录共享的用户

ios - YapDatabase 只使用单表存储数据

ios - 阻止 UISearchBarController 显示 UINavigationBar

ios - 如何在 iOS 图表的 X 轴上添加字符串?

java - 从Midi键盘录制音频文件并将其存储在android studio中

Haskell——理解编写器类型声明