IOS Chrome中SpeechSynthesis eloquence语音额外朗读内容问题咨询
iOS Chrome中SpeechSynthesis语音朗读内容差异的原因
问题背景
核心朗读代码如下:
const synth = window.speechSynthesis; const utterance = new SpeechSynthesisUtterance(text); utterance.voice = selectedVoice; synth.speak(utterance);
该代码在Mac Chrome上运行正常,但在iOS Chrome中,不同语音的表现出现明显差异:
- 含
compact的语音(如com.apple.voice.compact.en-GB.Daniel):仅朗读传入的text内容,符合预期。 - 含
eloquence的语音(如com.apple.eloquence.en-GB.Grandma):会额外播报调试类信息,顺序为:'speak. Voice name equals "com apple eloquence en-GB Grandma"'→ 目标text内容 →'Voice. speak.'。
iOS Chrome下en-GB语言的可用语音列表:
SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Rocko", name: "Rocko", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Shelley", name: "Shelley", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.voice.compact.en-GB.Daniel", name: "Daniel", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Grandma", name: "Grandma", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Grandpa", name: "Grandpa", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Flo", name: "Flo", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Eddy", name: "Eddy", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Reed", name: "Reed", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.eloquence.en-GB.Sandy", name: "Sandy", lang: "en-GB", localService: true, default: true} SpeechSynthesisVoice {voiceURI: "com.apple.voice.super-compact.en-GB.Daniel", name: "Daniel", lang: "en-GB", localService: true, default: true}
差异根源
- 语音引擎的设计定位不同:
eloquence系列是苹果早期的语音合成引擎,带有调试播报特性——最初为了便于开发人员确认语音服务是否正常启动,会在朗读前后额外输出语音标识信息。而compact系列是苹果后续推出的轻量化生产级引擎,移除了这类调试逻辑,仅专注于目标文本的朗读。 - 浏览器与系统语音的桥接逻辑:iOS Chrome没有自研语音合成服务,完全依赖iOS系统原生的SpeechSynthesis接口。对于
eloquence这类遗留引擎的额外播报内容,Chrome的桥接代码未做过滤,导致调试信息直接被输出;而compact引擎本身无此类输出,因此表现正常。 - 平台兼容性优先级:
eloquence语音主要是为了兼容旧版iOS应用保留的,苹果并未针对现代浏览器场景做适配优化;而compact语音是面向现代应用设计的,在跨浏览器调用时行为更统一。
内容的提问来源于stack exchange,提问作者Travis Chan
相关产品推荐
相关产品推荐

