手把手教你用Python调用Azure TTS的REST API,5分钟搞定免费语音合成

张开发
2026/4/16 18:06:01 15 分钟阅读

分享文章

手把手教你用Python调用Azure TTS的REST API,5分钟搞定免费语音合成
5分钟实战用Python调用Azure语音合成REST API的完整指南当你需要在应用中快速集成自然流畅的语音合成功能时微软Azure的文本转语音(TTS)服务是个不错的选择。相比复杂的SDK直接调用REST API更轻量高效——只需几行Python代码就能将文字转化为专业级语音输出。下面我将分享从密钥配置到音频生成的完整流程包含你可能遇到的所有技术细节。1. 准备工作获取Azure语音服务密钥在开始编码前我们需要准备好访问Azure语音服务的凭证。登录Azure门户创建一个语音服务资源在搜索栏输入语音服务点击创建选择Free F0定价层每月50万字符免费额度创建完成后在资源概览页找到密钥两个可互换的访问密钥区域如eastasia、westus等建议将密钥保存在环境变量中避免硬编码# 在终端设置环境变量(Linux/macOS) export AZURE_SPEECH_KEY你的密钥 export AZURE_SPEECH_REGIONeastasia或者在Windows PowerShell中$env:AZURE_SPEECH_KEY 你的密钥 $env:AZURE_SPEECH_REGION eastasia2. 查询可用语音列表发现最适合的音色Azure提供了上百种语音涵盖多种语言和方言。我们可以先通过API查看所有中文语音import os import requests def list_chinese_voices(): url fhttps://{os.getenv(AZURE_SPEECH_REGION)}.tts.speech.microsoft.com/cognitiveservices/voices/list headers { Ocp-Apim-Subscription-Key: os.getenv(AZURE_SPEECH_KEY) } response requests.get(url, headersheaders) voices [v for v in response.json() if v[Locale].startswith(zh-)] print(可用中文语音) for voice in voices: print(f{voice[ShortName]} ({voice[Gender]}) - {voice[LocaleName]})执行后会看到类似输出zh-CN-XiaoxiaoNeural (Female) - 中文(普通话简体) zh-CN-YunyangNeural (Male) - 中文(普通话简体) zh-HK-HiuGaaiNeural (Female) - 中文(粤语繁体)专业建议神经语音(Neural)比标准语音更自然适合产品级应用。3. 构造SSML请求语音合成的核心Azure TTS使用SSML(语音合成标记语言)来定义语音输出。一个典型的请求包含这些参数参数说明示例值X-Microsoft-OutputFormat音频输出格式riff-24khz-16bit-mono-pcmContent-Type请求内容类型application/ssmlxmlUser-Agent客户端标识你的应用名称以下是生成SSML的Python函数def generate_ssml(text, voice_namezh-CN-XiaoxiaoNeural): return f speak version1.0 xml:langzh-CN voice name{voice_name} {text} /voice /speak 高级技巧可以在SSML中添加prosody标签调整语速、音调prosody rate20% pitch10Hz需要强调的内容/prosody4. 完整API调用从文本到语音文件现在我们将所有部分组合起来实现完整的文本转语音功能import os import requests from pathlib import Path def text_to_speech(text, output_fileoutput.wav, voicezh-CN-XiaoxiaoNeural): region os.getenv(AZURE_SPEECH_REGION) url fhttps://{region}.tts.speech.microsoft.com/cognitiveservices/v1 headers { Ocp-Apim-Subscription-Key: os.getenv(AZURE_SPEECH_KEY), Content-Type: application/ssmlxml, X-Microsoft-OutputFormat: riff-24khz-16bit-mono-pcm, User-Agent: python-tts-client } ssml generate_ssml(text, voice) response requests.post(url, headersheaders, datassml.encode(utf-8)) if response.status_code 200: Path(output_file).parent.mkdir(exist_okTrue) with open(output_file, wb) as audio_file: audio_file.write(response.content) print(f音频已保存到 {output_file}) else: print(f请求失败: {response.status_code} - {response.text}) # 使用示例 text_to_speech(欢迎使用Azure文本转语音服务这是一次快速集成演示。)5. 高级配置与错误排查5.1 输出格式选择X-Microsoft-OutputFormat支持多种音频格式常见选项包括audio-16khz-32kbitrate-mono-mp3平衡质量和大小riff-16khz-16bit-mono-pcm无损质量文件较大webm-24khz-16bit-mono-opus适合网页使用5.2 常见错误处理错误码原因解决方案401密钥无效检查密钥和区域是否正确413文本过长单次请求不超过1000字符429请求过多免费层限每分钟20请求建议添加重试逻辑from time import sleep def safe_tts_request(text, max_retries3): for attempt in range(max_retries): try: return text_to_speech(text) except requests.exceptions.RequestException as e: if attempt max_retries - 1: raise sleep(2 ** attempt) # 指数退避5.3 流式处理长文本对于超长文本可以分段处理后合并from pydub import AudioSegment def long_text_to_speech(text, chunk_size800): chunks [text[i:ichunk_size] for i in range(0, len(text), chunk_size)] segments [] for i, chunk in enumerate(chunks): temp_file ftemp_{i}.wav text_to_speech(chunk, temp_file) segments.append(AudioSegment.from_wav(temp_file)) Path(temp_file).unlink() combined sum(segments[1:], segments[0]) combined.export(final_output.wav, formatwav)6. 实际应用场景示例6.1 电子书朗读系统def ebook_reader(chapter_file, output_diraudiobooks): with open(chapter_file, r, encodingutf-8) as f: text f.read() chapter_name Path(chapter_file).stem output_file f{output_dir}/{chapter_name}.mp3 # 使用更适合朗读的语音参数 ssml f speak version1.0 xml:langzh-CN voice namezh-CN-YunxiNeural prosody rate-10% {text} /prosody /voice /speak text_to_speech(ssml, output_file)6.2 动态生成语音验证码import random def generate_voice_captcha(length4): numbers 零一二三四五六七八九 captcha .join(random.choice(numbers) for _ in range(length)) text_to_speech(f您的验证码是{ .join(captcha)}, captcha.wav) return captcha在实际项目中我发现Azure TTS的神经语音在自然度上表现优异特别是zh-CN-YunyeNeural这类较新的语音模型。对于需要精细控制发音的场景SSML的phoneme标签能精确指定某些字的读法这在处理多音字时特别有用。

更多文章