Expo AV在iOS设备仅从听筒播放音频问题求助
iOS设备上Expo音频仅从听筒播放的问题排查与解决
核心原因
你的音频配置未明确指定输出路由为扬声器,iOS系统在未收到明确指令时,会根据当前音频会话设置自动选择输出设备——当配置中涉及录音权限(即使未实际录音),系统默认会切换到通话级别的音频路由(即听筒)。
修复方案
在Audio.setAudioModeAsync配置中添加defaultToSpeakerIOS: true,强制系统将音频输出到扬声器。同时优化其他相关配置,确保音频会话模式正确:
修改后的playSound函数:
async function playSound() { try { await Audio.setAudioModeAsync({ allowsRecordingIOS: false, playsInSilentModeIOS: true, defaultToSpeakerIOS: true, // 强制音频从扬声器输出 interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX, interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX, shouldDuckAndroid: false, }); const { sound } = await Audio.Sound.createAsync(require('./assets/beep.mp3')); await sound.playAsync(); } catch (error) { console.error('Failed to play sound', error); } }
补充排查点
- 若修改后仍无效,检查设备是否连接蓝牙设备——蓝牙音频设备优先级高于内置扬声器,需断开蓝牙再测试。
- 确保音频文件本身无问题,可以替换其他音频文件验证。
- 若需要同时支持录音和播放,需在录音结束后重新切换音频路由到扬声器。
内容的提问来源于stack exchange,提问作者Pablo Salazar
相关产品推荐
相关产品推荐

