python自制有声小说
最近工作中测试ASR,语音识别系统。人工读太累,想自动化来实现。给一段text,能给我发出正确的声音,然后按住按钮,产品能够录制下来并且正常识别。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771
可不可以实现呢,万能的python当然是可以的。
搜了一下文字转语音,发现python的库还是很多的。
主要来源于单纯的声音库类,多媒体库类的音频模块,游戏库的音频模块,界面窗口库自带的媒体播放模块
pyaudio
pydub
pyglet
pygame
网页正文识别也不在话下。这里我尝试了 readability、goose3。
1.1 readability
readability 支持 Python3,使用 pip install readability-lxml 安装即可。
readability 使用起来也很方便:
import requests
from readability import Documentresponse = requests.get('http://news.china.com/socialgd/10000169/20180616/32537640_all.html')
doc = Document(response.text)
print(doc.title())
但是 readability 提取到的正文内容不是文本,里面仍包含 HTML 标签。
当然也可以结合其他组件再对 HTML 进行处理,如 html2text,我们这里就不再延伸,有兴趣的可以自行尝试。
1.2 goose3
Goose 本来是一个用 Java 编写的文章提取器,后来就有了 Python 实现版:goose3 。
使用起来也很方便,同时对中文支持也不错。使用 pip install goose3 即可安装。
from goose3 import Goose
from goose3.text import StopWordsChinese
url = 'http://news.china.com/socialgd/10000169/20180616/32537640_all.html'g = Goose({'stopwords_class': StopWordsChinese})
article = g.extract(url=url)print(article.cleaned_text[:150])
可以看出网页正文提取效果还不错,基本满足我们的要求,可以使用!
这样爬取网页内容就很容易了。当然你也可以自己写爬虫。
我还发现一个这样的库:
pyttsx3(Text to Speech)是一个语音转换模块,它可以在离线的环境下工作,支持多个引擎
安装
pip install pyttsx3
尝试
import pyttsx3teacher = pyttsx3.init()
teacher.say('Hello World!')
teacher.runAndWait()
朗读中文
import pyttsx3msg = '''盼望着,盼望着,东风来了,春天的脚步...'''
teacher = pyttsx3.init()
teacher.say(msg)
teacher.runAndWait()
调节语速
import pyttsx3msg = '''盼望着,盼望着,东风来了,春天的脚步...'''
teacher = pyttsx3.init()
rate = teacher.getProperty('rate')
teacher.setProperty('rate', rate + 20)
teacher.say(msg)
teacher.runAndWait()
变换声音
import pyttsx3msg = '''天行健,君子自强不息'''
teacher = pyttsx3.init()
voices = teacher.getProperty('voices')
for i in voices:teacher.setProperty('voice', i.id)teacher.say(msg)
teacher.runAndWait()
读英文还好,但是,读不出中文,于是搜了一个答案,说要在windos机器上改个注册表
engine.setProperty("voice","HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0")
尝试了一下,是可以读出中文,但是读出来的太机械,很明显的机器的声音。对于我自动化已经满足,如果要来听书,还是要找个萝莉音更爽。
然后看到说有某度的AI语音识别,需要注册百度的应用开发者账户,
用户可以自行去下面的网站去注册[语音合成-百度AIai.baidu.com,注册百度云之后,去控制台创建应用,过程比较简单。
用python实现起来也比较简单:
步骤如下,
1.1 安装百度AI模块,安装命令“pip install baidu-aip”
1.2 安装pydub,pydub是python的一个音频处理库处理,能对wav格式的音频直接进行处理,安装命令“pip install pydub”
1.3 安装ffmpeg,可以实现对mp3格式的处理,安装命令“sudo apt-get install ffmpeg”
其中的参数如下:
参数 类型 描述 必传
tex String 合成的文本,使用UTF-8编码,请注意文本长度必须小于1024字节 是
lang String 语言选择,填写zh 是
ctp String 客户端类型选择,web端填写1 是
cuid String 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内 否
spd String 语速,取值0-9,默认为5中语速 否
pit String 音调,取值0-9,默认为5中语调 否
vol String 音量,取值0-15,默认为5中音量 否
per String 发音人选择,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女 否
接口对单次传入的文本进行了限制,合成文本长度必须小于 1024 字节,如果文本长度过长,就需要进行切割处理,采用多次请求的方式,分别转换成语音文件,最后再将多个语音文件合并成一个
写段代码试试看
from aip import AipSpeech
from pydub import AudioSegment
import time#input your own APP_ID/API_KEY/SECRET_KEY
APP_ID = '14891501'
API_KEY = 'EIm2iXtvDSplvR5cyHU8dAeM'
SECRET_KEY = '4KkGGzTq2GVrBEYPLXXWEEIoyLL1F6Zt ' print("baiduVoiceGenerate: V1.0, by Guanagwei_Jiang, 20181121")
str = raw_input("请输入要转成语音的文字:")
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis(str, 'zh', 1, { 'vol': 5,'per':4 })if not isinstance(result, dict):with open('temp.mp3', 'wb') as f:f.write(result)sound = AudioSegment.from_mp3('temp.mp3')
sound.export(time.strftime("%Y%m%d_%H%M%S", time.localtime())+".wav", format="wav")
于是就可以将爬到的文字,转换成语音。听下来效果还可以,可以根据参数换男/女声音,和感情度。
import re
from aip import AipSpeechapp_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)
可以将分段的语音,按照我前文的操作,所有的合并起来,就成了一个整体了。
或者使用pydub和ffmpeg实现wav转mp3格式。这样就实现了文字转声音。
python自制有声小说相关推荐
- Python喜马拉雅有声小说音频文件爬虫
今天爬取的是喜马拉雅有声小说. 目标网址:https://www.ximalaya.com/youshengshu/ 分析操作开始: 首先在喜马拉雅有声小说页面,播放任意音频. 当播放音频时,打开抓包 ...
- 用Python制作有声小说
作者:菜鸟哥 来源:程序员GitHub 大家好,欢迎来到 「Python数据之道」 ! 有不少朋友都热衷于看小说.俗话说:小说阅读一时爽,一直阅读一直爽.但是小说阅读时间久了,会给我们的眼睛带来很严重 ...
- 越来越好玩,用ChatGPT+Python 做有声小说!
菜鸟学Python-第623篇原创 现在我们几百人的会员群已经玩的越来越高级了,利用chatgpt花色玩法!有玩百度问一问每天早上6点多起来抢单的,有玩微信机器人帮人部署接单的,也有玩咸鱼去给大学生指 ...
- python有声读书_来香一个,用Python做有声小说!
对于小说,想必很多朋友都是十分的喜欢,也很热衷于阅读小说,小说阅读一时爽,一直阅读一直爽.但是小说阅读时间久了,会给我们的眼睛带来很严重的负担,造成眼部的一些不适. 为了解决这个问题,同时能够让大家体 ...
- Python制作属于自己的有声小说
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:merlin& PS:如有需要Python学习资料的小伙伴可 ...
- 懒人畅听网,有声小说类目数据采集,多线程速采案例,Python爬虫120例之23例
多线程在 Python 爬虫学习过程中应用落地,提速,提速,再提速. 目标站点分析 本次要抓取的目标为懒人畅听网,其中我随机选择了一个分类,有声小说频道,其余频道可使用雷同的办法抓取,增加遍历之后,可 ...
- python爬取有声小说网站实现自动下载实例
最近想下载一些有声小说,但是苦于没有找到批量下载,每次都是单集单集的下载的,觉得很麻烦,就考虑用python写一个爬虫来实现自动搜集小说,自动下载.下面就是开始展开漫漫的爬虫之路. 基础的就不多说了, ...
- python爬取有声小说_2019-04-23-Python爬取有声小说
Python爬取有声小说 [toc] 通过python爬取网站的资源,实现批量下载功能: 记录一次自己的学习经历,小白,非专业,难免有不足之处,望读者取其精华! 摘要 功能如下: 1.批量下载 2.批 ...
- Python爬取有声小说
Python爬取有声小说 文章目录 Python爬取有声小说 摘要 1.获取下载链接 2.分析规律,循环爬取 3.保存到本地,批量命名 4.界面设计 5.效果展示 通过python爬取网站的资源,实现 ...
最新文章
- 《概率机器人》里程计运动模型gmapping中代码解析
- 国家标准油类计算机,食用油新国标正式实施 产品配方将不再是“机密”
- java input 数组_Java基础之:数组
- 西电计算机学院(原软件学院)软件工程考研复试
- visual studio for mac的离线安装初体验
- HDU - 7084 Pty loves string kmp + fail树 + 主席树
- 简要安装FreeBSD 6.2及配置桌面环境[zz]
- strutr2运行流程
- Spring Cloud Bus 消息总线实现配置自动刷新
- linux下安装配置svn独立服务器
- Ora-12505 故障
- ThinkPHP5.0-多语言切换
- 【模电】0007 有源滤波器2(二阶有源滤低通波器)
- 成功学大师枭哥搞砸了,听懂掌声!
- 【2021最后一波官方福利】七天玩转Redis | 打卡还能领周边活动开始啦
- C++ uint8_t
- C语言int型数据范围
- 3D游戏建模线上和线下学习的区别
- php开源 tpshop,TPshop免费开源商城系统
- 市场调研—全球及中国细胞模型行业研究及十四五规划分析报告
热门文章
- [转载]堆排序(HeapSort) Java实现
- Mybatis if test 中int判断非空的坑
- python package 的两种组织方式
- Android SubsamplingScaleImageView(subsampling-scale-image-view)单双击长按事件【系列2】
- elasticsearch Java API 之Delete By Query API
- VNC客户端连接MacOS时一闪而过的解决办法
- 表1 中的值 给表2
- Nodejs线上日志部署
- 容器编排技术 -- 从零开始k8s
- 解决小程序图片在开发者工具能显示,测试时真机不显示问题