鱼C论坛

 找回密码
 立即注册
查看: 4486|回复: 8

[技术交流] Python 小技巧 066:文字转语音并保存为 .Mp3 音频

[复制链接]
发表于 2020-2-16 18:52:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2020-2-16 18:54 编辑

之前在 Python 小技巧 032:文字转语音 中介绍了如何将文字转成语音并播放。

有些鱼油反馈 Pyttsx3 自从 Python 3.8 就用不了了,这里教大家另外一种方案 —— 通过百度提供的 API 将文字转语音并存储进 .Mp3 音频中。

此方法合成音频的音质较好,但是有次数限制,不过如果只是自己用完全够用。

获取 APP_ID、API_Key 和 SECRET_Key 的步骤

1. 进入 百度语音网站,点击【创建应用】:

1.png

2.

应用名称自己随便填写;“应用类型” 用默认值,不用修改。

“接口选择” 中,点击 “文字识别”,勾选以下两项:

1.png

“文字识别包名” 与 “语音包名” 保持默认。

“应用描述” 也是随便填写:

1.png

填写完成后点击【立即创建】。

3. 这时你就获取到 APP_ID、API_Key 和 SECRET_Key 了:

1.png

4. 需要安装 baidu-aip 库:

1.png

代码模板

其中 APP_ID、API_Key 和 SECRET_Key 自己填:
from aip import AipSpeech

APP_ID = '你的 APP_ID'
API_KEY = '你的 API_Key'
SECRET_KEY = '你的 SECRET_Key'
text = "测试,测试,演示"    # text 是需要转语音的文本

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis(text, 'zh', 1, {'vol': 5, })

# 识别正确返回语音二进制,错误则返回 dict 类型
if not isinstance(result, dict):
    with open('E:/demo.mp3', 'wb') as f:    # 文件保存路径
        f.write(result)

运行上面这段程序,会在 E 盘生成一个 demo.mp3 文件,那就是文本转语音的结果试试播放吧

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
一个账号 + 1 + 1 嗯,不错,能不能简单地介绍一下这个库

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-16 19:51:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 20:11:45 | 显示全部楼层
zltzlt 发表于 2020-2-16 19:51
@一个账号 https://pypi.org/project/baidu-aip/ https://github.com/Baidu-AIP

去那里干嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 01:46:09 | 显示全部楼层
你好,如果我想要的操作是:不存储mp3,直接播放转化后的语音。需要怎么操作?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 02:13:37 | 显示全部楼层
本帖最后由 jmshtqm 于 2020-3-15 02:34 编辑
jmshtqm 发表于 2020-3-15 01:46
你好,如果我想要的操作是:不存储mp3,直接播放转化后的语音。需要怎么操作?

def tts(text_key):
    APP_ID = 'xx'
    API_KEY = 'xx'
    SECRET_KEY = 'xx'
    text = text_key  # text 是需要转语音的文本
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    result = client.synthesis(text, 'zh', 1, {'vol': 5, })
    # print(result)
    # print('yes')
    if not isinstance(result, dict):
        with open('auido.mp3', 'wb') as f:
            f.write(result)
    playsound("auido.mp3")
用playsound。
* 最初的目的是想调用Windows自带的文字转语音功能,但是自己的系统似乎是阉割精简版,没有成功修复tts功能。os.system(‘say’)用不了;python3.8装pyttsx3失败;pythoncom/win32com也提示“没有注册类”。倒腾到现在,使用百度API替代。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 02:21:44 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-15 03:24:44 | 显示全部楼层
jmshtqm 发表于 2020-3-15 02:13
用playsound。
* 最初的目的是想调用Windows自带的文字转语音功能,但是自己的系统似乎是阉割精简版 ...

想解决playsound不能自动关闭文件这个问题,手快更换了\Python\Python38\Lib\site-packages下playsound.py。
提示找不到这个模块了....

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 07:55:27 | 显示全部楼层
jmshtqm 发表于 2020-3-15 03:24
想解决playsound不能自动关闭文件这个问题,手快更换了\Python\Python38\Lib\site-packages下playsound.p ...

你的模块名不要用 playsound
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 19:40:52 | 显示全部楼层
zltzlt 发表于 2020-3-15 07:55
你的模块名不要用 playsound

昨天倒腾下弄好了。模块名和方法名一致可能有影响,现在先用着了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 22:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表