【问题标题】:iOS audio output only to headphone jackiOS 音频仅输出到耳机插孔
【发布时间】:2013-05-27 23:19:22
【问题描述】:

是否可以将音频输出到 iOS 设备的耳机插孔而不是其他地方? (例如,不是扬声器也不是蓝牙)

我们正在试验一种硬件插件,该插件可以从音频插孔接收作为音调的输入。我们可以尝试检测耳机插孔是否已连接,但这仍然会导致连接了蓝牙音频输出设备的情况——我们不希望在用户的蓝牙耳机或扬声器中听到声音。

【问题讨论】:

  • 你能做到这一点吗(音频输出只到耳机插孔)?我正在尝试实现同样的目标,但还没有成功。
  • 是的。查看接受的答案。
  • 我需要将 iOS 语音引导到耳机,即使它没有插入耳机。换句话说,当我的应用程序打开时,语音不应该转到扬声器。你能就此提出一些建议吗?接受的答案没有回答我的情况。
  • @maverick 你的意思是即使没有连接耳机,耳机插孔也会输出信号?我有一种感觉,这在 iOS 中是不可能的,因为它需要下降到音频驱动程序级别。 AFAIK 有一个物理开关,当您将某些东西放入插孔时会触发,这就是驱动程序用来重定向输出的东西。
  • 或者如果它不能将声音引导到耳机插孔以防它没有连接,至少在任何情况下使扬声器静音,这也足以满足我的目的。我只是不想让扬声器发出声音(VoiceOver 声音或我自己通过AVSpeechUtterance 播放的其他声音),而它应该通过耳机(如果已连接)发出。

标签: ios core-audio avaudiosession audiosession


【解决方案1】:

你需要阅读AudioSessionProgrammingGuide

您可以通过使用 kAudioSessionProperty_AudioRoute 属性调用 AudioSessionGetProperty 来获取当前音频“路由”。这会给你一个字符串,如“耳机”或“扬声器”,并以“路由”值播放音频文件

CFStringRef route;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &route);

NSLog(@"%@ %@",route,kAudioSessionInputRoute_Headphone);
NSLog(@"%ld",CFStringGetLength(route));
if ([(__bridge NSString *)route isEqualToString:@"Headphone"])
{
    // play audio sound
}
else
{
     // not play audio sound
}

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2014-09-06
    • 2012-12-22
    • 2013-10-06
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2013-11-25
    相关资源
    最近更新 更多