如何使用JavaScript调整Microsoft文本转语音的音高与语速
基于JavaScript实现微软Azure TTS音高、语速调整的实现方案
你要的音高、语速调整能力,本质是通过SSML(语音合成标记语言)的<prosody>标签实现的,官方演示页用的也是这套方案,相关参数没有单独列在普通语音合成接口的参数文档里,所以你找不到相关说明。
1. 前置依赖安装
如果是Node.js环境,直接安装语音SDK包:
npm install microsoft-cognitiveservices-speech-sdk
如果是浏览器端使用,直接引入对应UMD格式的SDK资源即可。
2. 核心参数说明
所有音频表现参数都通过SSML的<prosody>标签控制,和调整相关的两个核心属性:
pitch:控制音高,可选值支持预设等级(x-low/low/medium/high/x-high),也支持百分比调整(范围为-50%到+50%,数值越高音调越高)rate:控制播放语速,可选值支持预设等级(x-slow/slow/medium/fast/x-fast),也支持百分比调整(范围为0.5到2,对应0.5倍速到2倍速,也可以用50%到200%的写法)
3. 完整实现代码示例
// 引入SDK const sdk = require("microsoft-cognitiveservices-speech-sdk"); // 替换为你自己的Azure语音服务密钥和区域 const speechConfig = sdk.SpeechConfig.fromSubscription("你的语音服务密钥", "你的服务区域,例如eastus"); speechConfig.speechSynthesisVoiceName = "zh-CN-XiaoxiaoNeural"; // 可以替换为你需要的发音人 function synthesizeSpeechWithAdjustment(text, pitch = "+0%", rate = "1.0") { // 构造SSML内容 const ssml = ` <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN"> <voice name="${speechConfig.speechSynthesisVoiceName}"> <prosody pitch="${pitch}" rate="${rate}"> ${text} </prosody> </voice> </speak> `; const synthesizer = new sdk.SpeechSynthesizer(speechConfig, null); synthesizer.speakSsmlAsync( ssml, result => { if (result.reason === sdk.ResultReason.SynthesizingAudioCompleted) { // 音频合成完成,这里可以直接播放或者保存音频流 const audioContext = new AudioContext(); audioContext.decodeAudioData(result.audioData, buffer => { const source = audioContext.createBufferSource(); source.buffer = buffer; source.connect(audioContext.destination); source.start(0); }); } synthesizer.close(); }, error => { console.log(error); synthesizer.close(); } ); } // 调用示例:合成你好,音高升高20%,语速1.2倍 synthesizeSpeechWithAdjustment("你好", "+20%", "1.2");
4. 实时调整效果实现
如果需要实现和官方演示页一样的滑动滑块实时调整效果,只需要绑定滑块的change事件,动态获取当前音高、语速的数值,重新调用上述合成方法即可,最终效果和官方演示完全一致。
内容的提问来源于stack exchange,提问作者MAZ
相关产品推荐
相关产品推荐

