系列教程说明
这是「AI专家养成计划」系列教程的第60篇,共140篇。从AI零基础出发,每天进步一点点。晚课以实操为主,手把手教你做——读完这篇,你就能用开源工具让AI开口说话,做出自己的文字转语音应用。
上篇回顾
今天我们早课学习了语音合成的原理和核心技术。三个核心要点:
- 语音合成三阶段:从规则合成到拼接合成,再到参数合成,TTS技术经历了三代演进
- 深度学习改变一切:Tacotron、VITS等端到端模型让合成语音的自然度接近真人
- 开源选择丰富:从Edge-TTS(免费云端)到Coqui TTS(本地开源),每个人都能找到适合的方案
现在,我们进入实操环节。今晚的目标:用5个实操练习,亲手让AI开口说话。
实操一:3分钟安装Edge-TTS,让AI说出第一句话
为什么从Edge-TTS开始?
Edge-TTS是微软Edge浏览器的语音合成引擎的Python接口,免费、无需注册、支持400+种声音、支持中文,是零基础入门的最佳选择。
安装步骤
第1步:安装Edge-TTS
打开终端,输入:
`bash
pip install edge-tts
`
第2步:生成第一段语音
`bash
edge-tts –voice zh-CN-XiaoxiaoNeural –text “你好,我是AI语音助手,很高兴认识你!” –write-media hello.mp3
`
运行后会在当前目录生成 hello.mp3。播放听听效果!
探索更多声音
列出所有中文声音:
`bash
edge-tts –list-voices | grep zh-CN
`
你会看到几十种声音,比如:
zh-CN-XiaoxiaoNeural— 温柔女声(最常用)zh-CN-YunxiNeural— 阳光男声zh-CN-XiaoyiNeural— 甜美女声zh-CN-YunjianNeural— 沉稳男声
试试不同声音:
`bash
edge-tts –voice zh-CN-YunxiNeural –text “换个声音试试,感觉完全不同吧?” –write-media hello2.mp3
`
小技巧:加 --rate 调语速,+20% 加速,-20% 减速:
`bash
edge-tts –voice zh-CN-XiaoxiaoNeural –rate “+20%” –text “我可以说得更快哦” –write-media fast.mp3
`
实操二:Python脚本批量生成语音
写一个语音生成脚本
创建文件 tts_demo.py:
`python
import edge_tts
import asyncio
async def generate_speech(text, voice, output_file):
“””生成语音文件”””
communicate = edge_tts.Communicate(text, voice)
await communicate.save(output_file)
print(f”已生成:{output_file}”)
async def main():
# 定义多段文本
texts = [
(“欢迎来到AI语音合成的世界!”, “zh-CN-XiaoxiaoNeural”, “welcome.mp3”),
(“语音合成技术已经非常成熟了。”, “zh-CN-YunxiNeural”, “mature.mp3”),
(“你可以用它来做很多事情。”, “zh-CN-XiaoyiNeural”, “many_things.mp3”),
]
for text, voice, filename in texts:
await generate_speech(text, voice, filename)
asyncio.run(main())
`
运行:
`bash
python3 tts_demo.py
`
你会得到3个不同声音的MP3文件。
进阶:给文字加情感
Edge-TTS支持SSML(语音合成标记语言),可以控制语调、停顿、重音:
`python
async def emotional_speech():
“””带情感的语音合成”””
# SSML格式控制语音表现
ssml = “””
太好了!我终于学会了!
不过,这只是一个开始…
“””
communicate = edge_tts.Communicate(ssml, “zh-CN-XiaoxiaoNeural”)
await communicate.save(“emotional.mp3”)
print(“已生成带情感的语音:emotional.mp3”)
asyncio.run(emotional_speech())
`
SSML常用标签:
— 停顿500毫秒— 加速20%— 升高5个半音— 加重语气
实操三:本地部署Coqui TTS,离线也能用
为什么需要本地部署?
Edge-TTS需要网络连接。如果你需要离线使用、隐私保护、或自定义声音,就需要本地部署。
安装Coqui TTS
`bash
pip install TTS
`
列出可用模型
`bash
tts –list_models
`
用预训练模型生成语音
`bash
tts –text “你好,这是本地部署的语音合成系统。”
–model_name tts_models/zh-CN/baker/tacotron2-DDC-GST
–out_path local_output.wav
`
注意:首次运行会下载模型(约200-500MB),之后就可以离线使用了。
Python调用
`python
from TTS.api import TTS
# 初始化TTS
tts = TTS(model_name=”tts_models/zh-CN/baker/tacotron2-DDC-GST”)
# 生成语音
tts.tts_to_file(
text=”用Python调用语音合成就是这么简单。”,
file_path=”coqui_output.wav”
)
print(“已生成:coqui_output.wav”)
`
对比Edge-TTS和Coqui TTS:
| 特性 | Edge-TTS | Coqui TTS |
|---|
|——|———-|———–|
| 是否需要网络 | 是 | 否 |
|---|---|---|
| 声音质量 | 很高(云端模型) | 良好(本地模型) |
| 中文支持 | 400+种声音 | 几种预训练模型 |
| 自定义声音 | 不支持 | 支持微调 |
| 适合场景 | 快速开发、在线服务 | 离线应用、隐私场景 |
实操四:做一个文字转语音Web应用
用Gradio搭建交互界面
`bash
pip install gradio
`
创建 tts_app.py:
`python
import edge_tts
import asyncio
import gradio as gr
async def text_to_speech(text, voice, rate):
“””将文字转换为语音”””
if not text.strip():
return None
output_file = “output.mp3”
communicate = edge_tts.Communicate(text, voice, rate=rate)
await communicate.save(output_file)
return output_file
def generate(text, voice, speed):
“””Gradio调用的主函数”””
rate_map = {“慢速”: “-20%”, “正常”: “+0%”, “快速”: “+20%”, “极速”: “+40%”}
rate = rate_map.get(speed, “+0%”)
result = asyncio.run(text_to_speech(text, voice, rate))
return result
# 可选声音列表
voices = [
“zh-CN-XiaoxiaoNeural”,
“zh-CN-YunxiNeural”,
“zh-CN-XiaoyiNeural”,
“zh-CN-YunjianNeural”,
“zh-CN-YunyangNeural”,
]
# 创建Gradio界面
demo = gr.Interface(
fn=generate,
inputs=[
gr.Textbox(label=”输入文字”, placeholder=”在这里输入你想让AI说的话…”, lines=3),
gr.Dropdown(choices=voices, value=”zh-CN-XiaoxiaoNeural”, label=”选择声音”),
gr.Radio([“慢速”, “正常”, “快速”, “极速”], value=”正常”, label=”语速”),
],
outputs=gr.Audio(label=”生成的语音”, type=”filepath”),
title=”AI语音合成工具”,
description=”输入文字,选择声音和语速,一键生成语音。基于Edge-TTS,支持400+种声音。”,
)
demo.launch()
`
运行:
`bash
python3 tts_app.py
`
打开浏览器访问 http://localhost:7860,你就能看到一个完整的语音合成界面!
功能亮点:
- 支持4种语速调节
- 支持5种中文声音选择
- 实时生成,点击播放
- 一键下载MP3文件
实操五:用Pydub做语音后处理
安装Pydub
`bash
pip install pydub
`
常用操作
`python
from pydub import AudioSegment
from pydub.playback import play
# 加载音频
audio = AudioSegment.from_mp3(“hello.mp3”)
# 1. 调整音量(增加6分贝)
louder = audio + 6
louder.export(“louder.mp3″, format=”mp3”)
# 2. 加静音片段
silence = AudioSegment.silent(duration=1000) # 1秒静音
with_pause = audio + silence + audio
with_pause.export(“with_pause.mp3″, format=”mp3”)
# 3. 拼接多段音频
part1 = AudioSegment.from_mp3(“welcome.mp3”)
part2 = AudioSegment.from_mp3(“mature.mp3”)
combined = part1 + AudioSegment.silent(duration=500) + part2
combined.export(“combined.mp3″, format=”mp3”)
# 4. 转换格式
audio.export(“output.wav”, format=”wav”)
# 5. 截取片段(前5秒)
first_5_seconds = audio[:5000]
first_5_seconds.export(“first5s.mp3″, format=”mp3”)
print(“音频处理完成!”)
`
实战场景:
- 有声读物:多段语音拼接,中间加停顿
- 播客制作:片头+内容+片尾,调整音量一致
- 语音提示:截取关键片段,生成系统提示音
实战项目:做一个有声书生成器
把上面学到的技能组合起来,做一个完整项目:
`python
import edge_tts
import asyncio
from pydub import AudioSegment
async def generate_chapter(text, voice, output_file):
“””生成一个章节的语音”””
communicate = edge_tts.Communicate(text, voice)
await communicate.save(output_file)
return output_file
def create_audiobook(chapters, output_file=”audiobook.mp3″):
“””将多个章节合并为有声书”””
combined = AudioSegment.empty()
for i, chapter_file in enumerate(chapters):
chapter = AudioSegment.from_mp3(chapter_file)
# 章节之间加2秒停顿
if i > 0:
combined += AudioSegment.silent(duration=2000)
combined += chapter
combined.export(output_file, format=”mp3″)
print(f”有声书已生成:{output_file}”)
async def main():
# 示例:3个章节
chapters_text = [
“第一章:初识AI。人工智能,简称AI,是让机器模拟人类智能的技术。从语音助手到自动驾驶,AI正在改变我们的生活。”,
“第二章:机器学习。机器学习是AI的核心。通过大量数据训练,机器可以学会识别模式、做出预测。就像人类通过经验学习一样。”,
“第三章:深度学习。深度学习模仿人脑神经网络,让机器能够处理图像、语音、文字等复杂数据。这是当今AI突破的关键。”,
]
# 生成每个章节
chapter_files = []
for i, text in enumerate(chapters_text):
filename = f”chapter_{i+1}.mp3″
await generate_chapter(text, “zh-CN-XiaoxiaoNeural”, filename)
chapter_files.append(filename)
print(f”已生成:{filename}”)
# 合并为有声书
create_audiobook(chapter_files, “ai_audiobook.mp3”)
asyncio.run(main())
`
运行后你会得到一本完整的有声书!
📖 地铁深读:AI语音的前世今生
这个板块专为地铁通勤设计,每篇5-10分钟。不想深读可以跳过,不影响主线学习。
从机械合成到神经网络:语音合成的三次革命
第一次革命:规则合成时代(1960s-1990s)
最早的语音合成是”硬编码”的。工程师手动编写发音规则,告诉机器”a发什么音”、”b发什么音”。结果?每个字都能读出来,但连起来就像机器人在念经——没有任何语调、情感或停顿。
那个年代最著名的TTS系统是1978年MIT的”Perfect Paul”,它在Apple II上运行。你可以在YouTube上找到它的音频,听起来就像一个喝醉了的外星人在读英语课本。
第二次革命:统计参数合成(2000s-2015)
隐马尔可夫模型(HMM)的引入让TTS有了质的飞跃。机器开始从大量真人录音中学习语音规律,合成出来的声音开始有了”人味”。
但这个时代的TTS还是有明显问题:声音听起来”闷闷的”,像隔着一层纱布说话。这是因为HMM模型本质上是在做统计平均——它把所有可能的发音取了一个”安全中间值”,听起来自然但缺乏个性。
第三次革命:深度学习端到端(2016-至今)
2016年Google发布WaveNet,一切都变了。WaveNet用神经网络直接生成音频波形,合成质量首次达到人类水平。随后Tacotron 2、VITS等模型不断突破,现在的TTS已经很难分辨是真人还是AI。
最有趣的是:2024年以后,语音合成开始进入”个性化时代”。你只需要提供几秒钟的录音,AI就能克隆你的声音。这意味着每个人都可以拥有自己的”AI分身”。
语音合成的”恐怖谷”效应
你有没有这样的体验:听到一段语音,觉得”很像真人但又不太对”,有种说不清的违和感?
这就是语音合成的”恐怖谷”效应。当合成质量从”明显是机器”提升到”很像真人”时,我们的大脑反而会更加警觉——因为它太像了,但又不完全是。
有趣的实验:研究人员让受试者听两段录音,一段是真人,一段是AI合成。结果发现,当合成质量超过85%时,受试者反而更容易把真人误认为是AI——因为他们开始对所有声音都产生怀疑。
行业应用:有声书、播客、客服系统已经开始大规模使用AI语音。但为了保持听众的信任,很多平台会在开头标注”本内容由AI生成”。
一个值得思考的问题
如果AI可以完美克隆任何人的声音,这对社会意味着什么?
想象一下:
- 你的声音被AI克隆,然后被用来打电话诈骗你的家人
- 过世亲人的声音被AI”复活”,你可以随时和”他们”对话
- 政治人物的AI语音被制造出来,发表从未说过的言论
这些都不是科幻——它们已经发生或正在发生。2024年美国大选期间,就出现了大量AI克隆的政治人物语音。
技术本身是中性的,关键在于我们如何使用它。这也是为什么我们在这个系列的第9周要专门讨论AI伦理与安全——因为学会使用AI的同时,我们也必须学会负责任地使用它。
留个悬念:Day 57左右,我们会讲到”AI偏见与公平性”——那时候你就能理解,为什么语音合成技术的滥用比你想象的更危险。
今日总结
今天的三个关键要点:
- Edge-TTS是零基础入门的最佳选择:免费、无需注册、支持400+种声音,3分钟就能上手
- Python让语音合成变得可编程:批量生成、SSML控制情感、Web应用搭建,一切皆可自动化
- Pydub是音频后处理的瑞士军刀:拼接、调整音量、转换格式,有声书生成器就是这么简单
今日行动项
今天的三个小任务:
- 任务一:用Edge-TTS生成3段不同声音的中文语音,对比效果差异
- 任务二:写一个Python脚本,将一段文字自动分割为多段并生成不同语速的语音
- 任务三:用Gradio搭建一个简单的语音合成Web应用,分享给朋友试用
下篇预告
明天早上8点:Day31——AI音乐:作曲新方式 —— AI如何学会创作音乐?从旋律生成到编曲,音乐创作正在被AI重新定义。
明天下午5点:Day31——晚课 AI音乐实战 —— 用AI工具创作你的第一首音乐,从旋律到完整编曲。
发表回复