You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:39:02