Python实战---制作专属有声小说(调用百度语音合成接口)
这一次的目标是使用百度云的人工智能接口,实现文字转语音的实时转换,将小说文字转换成语音朗读出来。
百度云接口调用
百度的这个接口对于我们普通用户非常友好,他的很多功能都是免费的,而且我们每天可以免费调用这个接口五千次,非常适合我们玩转这些功能。
注册百度云账号
首先打开百度云语音合成模块接口地址
打开网址后点击《立即使用》选项,然后会出现登录的选项界面。如果没有账号,需要先注册一个百度云账号,注册方法非常简单,我就不过多赘述了
登录账号之后,会自动进入控制台界面,因为现在我们还没有创建应用,这里显示的就是0个

点击应用列表,创建应用,弹出的创建应用配置项,其中的内容随意填写即可

填写完成,点击立即创建,返回到应用列表,此时可发现我的应用下多出了一个应用项目

使用接口
安装模块
在python环境下使用该接口必须要安装模块
pip install baidu-aip
安装成功可见如下提示

生成一段语音
通过查看百度语音合成的技术文档,可以发现如下的几个参数:

将这些参数传递到技术文档所给的框架中,就可以生成一段语音:
from aip import AipSpeech
app_id = '你的Appid'
api_key = '你的API key'
secret_key = '你的 screct key'
client = AipSpeech(app_id,api_key,secret_key)
result = client.synthesis('人生得意须尽欢,莫使金樽空对月','zh','1',
{"vol": 9,
"spd": 4,
"pit": 9,
"per": 3,
})
with open("audio.mp3","wb") as f:
f.write(result)
运行完这一段代码之后,就会在当前文件夹下生成一个audio.mp3的音频文件,打开之后就是可以听到朗诵的诗句
小说文字转语音
在阅读了技术文档之后,可知这个模块最大的限制就是一次转换的语音不能超过1024字节(大约是512个汉字),所以我们要进行的第一步操作就是将一篇小说切割成若干个五百字数的文本文档。
首先我先找到一篇小说,将它复制到文档中,命名为read.txt 接下来我准备使用代码来切割小说内容,一段的字数为500字
先将小说的内容提取出来,每隔1000个字节(500字)加上“---”的符号作为切割标志
with open('read.txt','r') as a:
text = a.readlines()
for cut in text:
#以1000个字节的长度进行分割
text_cut = re.findall('.{1000}', cut)
text_cut.append(cut[(len(text_cut) * 1000):])
#在分割后的字符串中间插入"---"
text_final = '---'.join(text_cut)
#计算文本中有多少个"---"标志
times = text_final.count('---')
之后将文本以---为标志进行分割,并分别将内容赋值到name变量中。正常来说,列表的起始位为第0位,但是为了满足我们的阅读习惯,所以将这些文本从1开始计数
for n in range(0,times+1):
name = text_final.split('---')[n]
最后一步,将提取出来的文本内容传入api接口,输出语音文件
完整代码(将三个参数替换成之前申请的内容)
import re
from aip import AipSpeech
app_id = 'id'
api_key = 'APIkey'
secret_key = 'screctkey'
client = AipSpeech(app_id,api_key,secret_key)
with open('read.txt','r') as a:
text = a.readlines()
for cut in text:
#以1000个字节的长度进行分割
text_cut = re.findall('.{1000}', cut)
text_cut.append(cut[(len(text_cut) * 1000):])
#在分割后的字符串中间插入"---"
text_final = '---'.join(text_cut)
#计算文本中有多少个"---"标志
times = text_final.count('---')
for n in range(0,times+1):
name = text_final.split('---')[n]
result = client.synthesis(name, 'zh', '1',
{"vol": 9,
"spd": 4,
"pit": 9,
"per": 3,
})
with open('test/' + str(n + 1) + '.mp3', "wb") as d:
print('正在生成第' + str(n + 1) + '段语音......')
d.write(result)
实现结果:

打开test文件夹,点击mp3文件就可以开始听小说了

有一说一,这个百度人工智能所装换的语音非常像有个人在你旁边给你读书,体验感远超pyttsx3模块,非常nice!
百度的人工智能接口还有非常多好用的功能,例如人脸识别、语音转文字、人脸对比......感兴趣的同学可以自己去探索一下
Python实战---制作专属有声小说(调用百度语音合成接口)的更多相关文章
- js调用百度地图接口
原文:js调用百度地图接口 这是前几天公司做的新项目,上面需要用到地图的数据.第一次做这类型的东西没啥思路,咱们经理说,这东西简单,截个图存文件夹里调整好尺寸,数据库里存上图片的地址动态调用就行了.心 ...
- Winform调用百度地图接口简单示例
1.首先用一个html文件调用百度地图接口(主要注册一个序列号): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- python录音并调用百度语音识别接口
#!/usr/bin/env python import requests import json import base64 import pyaudio import wave import os ...
- Winform调用百度地图接口
using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using ...
- PHP 最完美调用百度翻译接口代码示例 (原)
php调用百度翻译最新接口代码 问 题:写的过程遇到了一个问题,url拼接好的原翻译内容,appid,sign的地址直接输出到浏览器可以打开看到翻译后的返回值,但是各种curl,file_ ...
- .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- PHP调用百度天气接口API
//百度天气接口API $location = "北京"; //地区 $ak = "5slgyqGDENN7Sy7pw29IUvrZ"; //秘钥,需要申请,百 ...
- Unicode浅析——调用科大讯飞语音合成接口(日语)所遇到的天坑
如题,最近做的项目需要调用科大讯飞的语音合成接口,将日文合成日语.然后坑爹的是跟我对接的那一方直接扔过来一份接口文档,里面并未提及日语合成所需要的参数.中文.英文合成倒是没问题,就这个日语合成的音频始 ...
- python调用百度语音识别接口实时识别
1.本文直接上干货 奉献代码:https://github.com/wuzaipei/audio_discern/tree/master/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5% ...
随机推荐
- Natas2 Writeup(水平越权)
Natas2: 查看源码,发现页面隐藏了一个图片的连接,分析图片,无隐写内容,联想到目录权限问题,访问同级目录http://natas2.natas.labs.overthewire.org/file ...
- 【开发工具 docker】值得学习的应用容器引擎docker安装
概述: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何 ...
- 从零开始学习R语言(八)——R语言绘图
本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/74051739 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125683 ...
- VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用和secureCUT乱码
错误:VMWARE虚拟机安装系统提示CPU已被客户机操作系统禁用 改正:找到虚拟机的位置找到下图灰色的部分:打开 .vmx后缀的操作系统配置文件,加入以下代码: cpuid.1.eax = :: 2. ...
- 同源策略与JSONP劫持原理
同源策略 浏览器中有两个安全机制,一个浏览器沙盒(Sandbox),另一个就是同源策略(Same Origin Policy,简称SOP) ,下面介绍同源策略.同源是指同协议.同域名.同端口,必须三同 ...
- ThunderNet :像闪电一样,旷视再出超轻量级检测器,高达267fps | ICCV 2019
论文提出了实时的超轻量级two-stage detector ThunderNet,靠着精心设计的主干网络以及提高特征表达能力的CEM和SAM模块,使用很少的计算量就能超越目前的one-stage d ...
- ClickHouse学习系列之二【用户权限管理】
背景 最近花了些时间看了下ClickHouse文档,发现它在OLAP方面表现很优异,而且相对也比较轻量和简单,所以准备入门了解下该数据库系统.在安装完之后首先做的应该如何设置用户密码以及权限控制.因为 ...
- 一个js函数算出任意位数的水仙花数
一个算出任意位数的水仙花数的函数如下: var arr =[]; /*更改num确定取值范围*/ for(var num = 100; num <= 9999;num++){ /*多位数版本*/ ...
- 电脑网络诊断显示Win10无法与设备或资源(DNS)通信解决办法
最近是做多错多还是人有点儿衰神附体,软件,电脑系统,各种问题层出不穷,今天早上打开电脑发现不少软件都无法联网,神马百度商桥,腾讯浏览器,百度云...昨天百度商桥打不开还以为是软件出了问题,因为火狐浏览 ...
- Day13 流程控制
Linux中的流程控制语句 一.if语句 1.单分支if条件语句 格式:if [ 条件判断式 ] then 程序 fi 注意:1.在Linux中是以if开头,fi结尾.其他地方一般是{开头,} ...