×

注意!页面内容来自https://blog.csdn.net/weixin_35408656/article/details/116186328,本站不储存任何内容,为了更好的阅读体验进行在线解析,若有广告出现,请及时反馈。若您觉得侵犯了您的利益,请通知我们进行删除,然后访问 原网页

python故事书,Python 居然可以读故事了

本文作者分享了如何使用有道智云的语音合成就技术,将文本转换为可听的音频文件,从而实现让Python读故事。通过创建API实例,调用语音合成接口,将小说文本转化为自然流畅的音频,解决了原有朗读软件僵硬的问题。作者提供了详细的开发过程,包括代码实现和接口调用,展示了从文本加载到生成音频的完整逻辑。
部署运行你感兴趣的模型镜像

惊!Python 居然可以读故事了

之前上班很忙,回到家之后只想闭着眼睛好好休息会,不想看屏幕,但是我又想想追之前没看完的小说,然后...我需要一个可以给我讲故事的机器人

虽然浏览器和读书软件里面也能朗读,但是我觉得太僵硬了,本来是很有意思的一段剧情,被念成流水账,听着想睡觉、让人分分钟想着弃坑,然后我就打算用爬虫定时下载新的章节再把文字储存到音频软件,这样不仅可以再选择一个好用的语音合成工具来处理,并且还可以反复听,香香了~

文本整合容易,但是如何将其快速转换成音频呢?难道要自己训练模型 “炼丹” 解决?no no ,费力不讨好,毕竟自己手头这点算法知识非常浅显,而且硬件条件也不允许,本着 “能用就行” 的原则,我决定先使用市面上开放平台的产品来解决。经过对比,发现有道智云的语音合成还不错(此处可体验),决定使用有道智云的语音合成 API 进行开发。

效果先睹为快:

先用朱自清先生的《荷塘月色》的两段进行试验,开发了简单的 demo,搞定了从文本的加载到生成音频文件的逻辑

以下是详细的开发过程

f7868a1c0be1

image.png

要转化成语音的文本:

f7868a1c0be1

image.png

合成结果(第一段):

合成结果(第二段):

很可惜,这里不能上传 mp3 格式的音乐文件

f7868a1c0be1

image.png

调用 API 接口的准备工作

先创建实例和应用,然后绑定它们,获取id和密匙。个人注册的具体过程请见文章分享一次批量文件翻译的开发过程。

f7868a1c0be1

image.png

开发过程详细介绍

下面介绍具体的代码开发过程。

首先根据文档来分析有道智云的 API 输入输出规范。语音合成 API 调用十分简单,该 API 采用 https 方式通信,所需参数如下表:

字段名

类型

含义

必填

备注

q

text

待合成音频文件的文本字符串

True

比如:您好

langType

text

合成文本的语言类型

True

appKey

text

应用 ID

True

可在 应用管理 查看

salt

text

UUID

True

UUID

sign

text

True

MD5(应用 ID+q+salt + 应用密钥)

voice

text

翻译结果发音选择,0 为女声,1 为男声,默认为女声

false

0

format

text

目标音频格式,支持 mp3

false

mp3

speed

text

合成音频的语速

false

比如:"1" 为正常速度

volume

text

合成音频的音量

false

正常为 "1.00"最大为 "5.00"最小为 "0.50"

简单的概括一下,需要的音频特征,用utf-8编码文本组织好自己的语言,再加上签名等参数就可以得到一份令人满意的合成音频

在接口输出中里,合成成功的话,正常的返回会是二进制的语音文件,但是如果出现了错误,就会返回到on结果,可以用这个来判断运行是否成功

Demo 开发:

这个 demo 使用 python3 开发,包括 maindow.py,synthesis.py,synthesistool.py 三个文件,分别为 demo 的界面、界面逻辑处理和语音合成接口调用工具封装。

界面部分:

界面部分代码如下,比较简单。

root=tk.Tk()

root.title("youdao speech synthesis test")

frm = tk.Frame(root)

frm.grid(padx='50'pady='50')

btn_get_file = tk.Button(frmtext='选择待合成文件'command=get_files)

btn_get_file.grid(row=0column=0ipadx='3'ipady='3'padx='10'pady='20')

text1 = tk.Text(frmwidth='40'height='10')

text1.grid(row=0column=1)

btn_sure=tk.Button(frm,text="合成",command=synthesis_files)

btn_sure.grid(row=1,column=1)

复制代码

其中启动按钮 btn_sure 的绑定事件 synthesis_files() 来收集带所有的文本文件,启动合成,并打印运行结果:

def synthesis_files():

if syn_m.file_paths:

message=syn_m.get_synthesis_result()

tk.messagebox.showinfo("提示"message)

os.system('start' + '.\\result')

else :

tk.messagebox.showinfo("提示","无文件")

复制代码

synthesis.py

这里主要是配合界面实现一些文本读取和请求接口处理返回值的逻辑。首先定义一个 Synthesis_model

class Synthesis_model():

def __init__(self,file_paths,result_root_path,syn_type):

self.file_paths=file_paths

self.result_root_path=result_root_path

self.syn_type=syn_type

复制代码

get_synthesis_result() 方法实现了批量读取文件并调用合成方法、处理返回信息的逻辑:

def get_synthesis_result(self):

syn_result=""

for file_path in self.file_paths:

file_name=os.path.basename(file_path).split('.')[0]

file_content=open(file_path,encoding='utf-8').read()

result=self.synthesis_use_netease(file_name,file_content)

if result=="1":

syn_result=syn_result+file_path+" ok !\n"

else:

syn_result=syn_result+file_path+result

return syn_result

复制代码

单独定义了方法 synthesis_use_netease() 具体实现调用 API 的方法,这样增加了 demo 的扩展性,实现了一种合成模块可插拔的松耦合形式:

def synthesis_use_netease(self,file_name,text):

result=connect(text,'zh-CHS')

print(result)

if result.headers['Content-Type']=="audio/mp3":

millis = int(round(time.time() * 1000))

filePath = "./result/" + file_name+"-"+str(millis) + ".mp3"

fo = open(filePath'wb')

fo.write(result.content)

fo.close()

return "1"

else:

return "error:"+result.content

复制代码

synthesistool.py

synthesistool.py 中是和请求有道智云 API 直接相关的一些方法,最核心的是 connect() 方法,整合了 API 所要求的各个参数,并调用执行请求的方法 do_request(),并返回 API 处理结果。

def connect(text,lang_type):

q = text

data = {}

data['langType'] = lang_type

salt = str(uuid.uuid1())

signStr = APP_KEY + q + salt + APP_SECRET

sign = encrypt(signStr)

data['appKey'] = APP_KEY

data['q'] = q

data['salt'] = salt

data['sign'] = sign

response = do_request(data)

return response

复制代码

温馨提示: 1、运行 demo 时,需要替换 synthesistool.py 模块中的 APP_KEY 、 APP_SECRET 为你自己生成的 APP_KEY、APP_SECRET 哦 2、你要手动在项目路径下创造./result 文件夹,或者修改成其他的位置

总结

以上就是我的开发过程,有道智云的语音合成 API 文档清晰,调用过程全程无坑,开发体验和合成效果都令人感到舒适。

想学习python的可以关注私信我哦

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
参与评论 您还未登录,请先 登录 后发表或查看评论
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
< type="text/css">
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值