如何设置iOS应用程序以使用USB音频输入和输出到内置扬声器
我有两种不同的吉他适配器,使用闪电连接器连接到我的iphone
当插入适配器1时,该设备成为USB音频麦克风,它通过我的iPhone扬声器播放声音,因为适配器不包含耳机插孔
插入适配器2后,设备将变为USB音频麦克风,但通过适配器上的耳机插孔播放声音。
我正在尝试编写一个与适配器2兼容的应用程序,但不是将声音输出到适配器的耳机插孔,我想通过iPhone的扬声器进行路由。
下面的代码应该可以工作,但我发现用AVAudioSessionPortOverrideSpeaker
选项调用AVAudioSessionPortOverride
并且音频会话的类别是AVAudioSessionCategoryPlayAndRecord
导致音频使用内置扬声器和麦克风而不管其他设置,基本上忽略setPreferredInput
我不太明白适配器1如何设法从USB音频和输出到扬声器输入,但我的应用程序不能由于上述限制。 有人知道解决方案吗?
AVAudioSession* session = [AVAudioSession sharedInstance]; //Set the audioSession category. Needs to be Record or PlayAndRecord to use audioRouteOverride: [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil]; //set the audioSession override [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; //activate the audio session [session setActive:YES error:nil]; //set input to usb for (AVAudioSessionPortDescription *destPort in session.availableInputs){ if ([destPort.portType isEqualToString:AVAudioSessionPortUSBAudio]) { [setPreferredInput:(AVAudioSessionPortDescription *)inPort error:(nil)outError session setPreferredInput:destPort error:nil]; } }
我认为当USB设备没有音频输出组件时,您只能通过USB设备实现输入并通过扬声器输出。
我找不到任何说明这一点的文档,但我的推理如下:
混合和匹配音频设备是通过AVAudioSessionCategoryPlayAndRecord
的通用版本AVAudioSessionCategoryPlayAndRecord
,即所谓的多路径类别( AVAudioSessionCategoryMultiRoute
)及其在AVAudioSession.h
文档说
- 输入仅限于后进输入端口。
- 仅当没有连接其他符合条件的输出时,才允许使用
AVAudioSessionPortBuiltInSpeaker
第1点不是问题,但第2点不允许适配器2方案。
注意这将允许适配器1和2同时使用USB输入和线路输出或耳机。 这会对你有用吗?
这是一个很长的镜头,但你试过..
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil]
..还是overrideOutputAudioPort:
:?