Day30——晚课 语音合成:让AI开口说话

作者:

系列教程说明

这是「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工具创作你的第一首音乐,从旋律到完整编曲。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注