一个资深小说迷打开小说的正确姿势(续)----百度AI文字转语音

article/2025/11/10 20:36:17

前段时间闲得无聊,使用python抓取了自己想看的小说,抓取方法:一个资深小说迷打开小说的正确姿势
在这里插入图片描述
最近发现连续长时间盯着屏幕,眼睛实在是有点遭不住。对于我这种又想保护视力,又不想放下小说的人来说,简直就是遇到了像 “ 鱼与熊掌不可兼得” 一般的世纪难题。
在这里插入图片描述
正当我思考如何两害取其轻的时候,有人私信我帮忙做一个文字转语音的接口,我突然灵机一动,这简直就是送上门来的满分答案啊
在这里插入图片描述
当然,对于我这种社畜来说,是万万不可能自己实现文字转语音功能的,我没有那个精力,更没有那个 money
在这里插入图片描述
不过,咱不会煮饭,咱还不会点外卖么?O(∩_∩)O哈哈~
在这里插入图片描述
打开快被我点裂开了的 google chrome 搜了搜,果然很多公司都提供现成的免费接口,比如百度、讯飞…最后我选择了百度AI接口(这种东西啊,就和点外卖是一样的,同样都是芋儿鸡,店家不一样,做出来的味道就有好有坏。当你都没吃过时,牌子大一点的店或许是个不坏的选择)
在这里插入图片描述
言归正传,首先你得去百度控制台登录一下,没有百度账号的需要注册:
https://ai.baidu.com/tech/speech
在这里插入图片描述

然后需要创建一个应用,创建好了之后,就能拿到我们想要的三个东西
在这里插入图片描述
然后,python需要安装两个库(百度接口库和语音播放库),如果不需要python播放音频的话,只需要安装第一个库就行:

pip install baidu-aip
pip install playsound

根据百度提供的接口文档https://ai.baidu.com/ai-doc/SPEECH/Gk4nlz8tc,我们可以很容易的将一段文本翻译成音频文件,如:

from aip import AipSpeech	# 导入api接口
from playsound import playsound	# 音频模块#对应填入百度控制台获取的三个参数
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)data = '你是最棒的,hello world'
result = client.synthesis(data, 'zh', 1, {'per': 4,'spd': 3,    # 速度'vol': 7   # 音量
})
if not isinstance(result, dict):with open('hello.mp3', 'wb') as f:f.write(result)# 播放
playsound("hello.mp3")

上面这段代码,你只需要对应的填入百度后台获取的三个参数,然后运行文件,就会在你的代码文件同级目录下生成一个音频文件hello.mp3,并且会有美女夸你
在这里插入图片描述
有美女夸固然是好,可是我们最初的梦想是听小说啊。
在这里插入图片描述
别着急,你只需要将代码中的 data 内容换成咱们使用爬虫爬下来的小说内容,如:

#读取文本文件内容with open(file_name, 'r', encoding='utf-8') as f:data = f.read()

此时要注意,百度API每一次翻译的文本长度必须小于1024字节,小说每一章的内容往往大于1024字节,怎么办呢?
咱们可以将文本分割,然后多次请求就行了,写一个分割方法,像这样:

#按指定字节数分割字符串
def byte_split(seq):list = []while seq:if len(seq) >= 1024:list.append(seq[:1024])seq = seq[1024:]else:list.append(seq)seq = []return list

简单封装一下,第一版就出炉啦:

from aip import AipSpeech	# 导入api接口
from playsound import playsound	# 音频模块
import sys#百度账号信息配置
#对应填入百度控制台获取的三个参数
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)#按指定字节数分割字符串
def byte_split(seq):list = []while seq:if len(seq) >= 1024:list.append(seq[:1024])seq = seq[1024:]else:list.append(seq)seq = []return list'''@desc 写入音频@param data_arr list 文件数组@param vedio_name string 音频文件名@return 音频文件名
'''
def vedio_write(data_arr, vedio_name):name = vedio_name + '.mp3'for i in data_arr:#请求百度接口,获取语音二进制result = client.synthesis(i, 'zh', 1, {'per': 4,'spd': 3,    # 速度'vol': 7   # 音量})#判断是否翻译成功-成功则写入,失败则打印错误信息if not isinstance(result, dict):with open(name, 'ab') as f:f.write(result)else:print(result)return name    #主函数
if __name__ == "__main__":#文本文件file_name = r'../novel/quanzhifashi/第1章 世界大变.txt'#音频文件名vedio_name = file_name.split('/')[-1].split('.')[0]#读取文本文件内容with open(file_name, 'r', encoding='utf-8') as f:data = f.read()#按字符串拆分成数组data_arr = byte_split(data) #写入音频,返回音频文件名vedio = vedio_write(data_arr, vedio_name)     # 播放playsound(vedio)

点击运行,在我的保存目录找到了自己想要的结果
在这里插入图片描述
但是并没有给我播放视频,而且反手扔给我一个Error
在这里插入图片描述
查看报错信息发现,由于我的音频文件是中文名,所以播放失败了,将中文换掉就可以正常播放。

但是总有像我一样杠中带倔的人,喜欢将音频文件命名为中文,怎么办呢?当然是打开我那要裂开了的google chrome 啊。巡视了一圈,最后发现pygame库可以解决这个问题。好嘛,安装pygame库:

pip install pygame

封装个方法,使用pygame播放音频:

# 播放音频
# 貌似只能播放单声道音乐,可能是pygame模块限制
def playMusic(filename, loops=0, start=0.0, value=0.5):""":param filename: 文件名:param loops: 循环次数:param start: 从多少秒开始播放:param value: 设置播放的音量,音量value的范围为0.0到1.0:return:"""flag = False  # 是否播放过pygame.mixer.init()  # 音乐模块初始化while 1:if flag == 0:pygame.mixer.music.load(filename)# pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。pygame.mixer.music.play(loops=loops, start=start)pygame.mixer.music.set_volume(value)  # 来设置播放的音量,音量value的范围为0.0到1.0。if pygame.mixer.music.get_busy() == True:flag = Trueelse:if flag:pygame.mixer.music.stop()  # 停止播放break

再将之前的代码整合一下子,最终版本就出炉了:

from aip import AipSpeech	# 导入api接口
#from playsound import playsound	# 音频模块
import sys
import pygame#百度账号信息配置
#对应填入百度控制台获取的三个参数
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)#按指定字节数分割字符串
def byte_split(seq):list = []while seq:if len(seq) >= 1024:list.append(seq[:1024])seq = seq[1024:]else:list.append(seq)seq = []return list'''@desc 写入音频@param data_arr list 文件数组@param vedio_name string 音频文件名@return 音频文件名
'''
def vedio_write(data_arr, vedio_name):name = vedio_name + '.mp3'for i in data_arr:#请求百度接口,获取语音二进制result = client.synthesis(i, 'zh', 1, {'per': 4,'spd': 3,    # 速度'vol': 7   # 音量})#判断是否翻译成功-成功则写入,失败则打印错误信息if not isinstance(result, dict):with open(name, 'ab') as f:f.write(result)else:print(result)return name    # 播放音频
# 貌似只能播放单声道音乐,可能是pygame模块限制
def playMusic(filename, loops=0, start=0.0, value=0.5):""":param filename: 文件名:param loops: 循环次数:param start: 从多少秒开始播放:param value: 设置播放的音量,音量value的范围为0.0到1.0:return:"""flag = False  # 是否播放过pygame.mixer.init()  # 音乐模块初始化while 1:if flag == 0:pygame.mixer.music.load(filename)# pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。pygame.mixer.music.play(loops=loops, start=start)pygame.mixer.music.set_volume(value)  # 来设置播放的音量,音量value的范围为0.0到1.0。if pygame.mixer.music.get_busy() == True:flag = Trueelse:if flag:pygame.mixer.music.stop()  # 停止播放break#主函数
if __name__ == "__main__":#文本文件file_name = r'../novel/quanzhifashi/第1章 世界大变.txt'#音频文件名vedio_name = file_name.split('/')[-1].split('.')[0]#读取文本文件内容with open(file_name, 'r', encoding='utf-8') as f:data = f.read()#按字符串拆分成数组data_arr = byte_split(data) #写入音频,返回音频文件名vedio = vedio_write(data_arr, vedio_name)     #音频播放playMusic(vedio)#playMusic('out.wav')# 播放#playsound(vedio)

谁说鱼与熊掌不可兼得?

The end !

一个人最好的生活状态,有自己的生活和情趣,努力完善自己。没人爱时专注自己,有人爱时,有能力拥抱彼此。


http://chatgpt.dhexx.cn/article/iaYEtGgt.shtml

相关文章

程序员的三体世界 小说|从千万级架构到大数据人工智能中台的讨论

程序员的三体世界 从千万级架构到大数据人工智能中台的讨论 目录 程序员的三体世界 序言 第一节 面试 第二节 大数据已标准化,人工智能还是人工智障 第三节 中台 旁白 序言 当你真正的明白程序员是什么,你们还引以为傲吗,你们还想入…

股票交易接口软件服务涵盖范围有哪些?

通常所说的股票交易接口软件是指量化交易程序员们可以自行查询各大交易网站或交易所的股票历史数据及行情数据的工具,如:实时报价;走势图;价差图;基金、债券、期货、外汇、保险等各类金融数据查询等,进行数…

国外高校解除ChatGPT禁令,对留学生是福是祸?

ChatGPT发布近1年,各大高校对它的态度也发生了极大转变,今年3月发布ChatGPT禁令的牛剑等世界顶级名校也在近期解除了ChatGPT禁令,发布了生成式人工智能使用指南。 ChatGPT一定程度上可以解放科研人员的劳动力,与其直接禁止不如教…

计算机专业留学生回国找工作容易吗,留学生归国后一般都找什么工作?

对于留学生归国找工作的人来讲,找工作似乎已经成为困扰他们的难题。毕竟现在国内市场中,优秀的工作岗位竞争一直很大,这些留学生们要找什么样的工作,以及在找工作之时会遇到什么难处呢?针对这两点,BOSS直聘…

Ubuntu输入密码登陆不了仍跳回到登录界面

现象:在Ubuntu登陆界面输入密码之后,黑屏一闪并且出现了check battery state之类的文字之后,又跳转到登录界面。 原因:主目录下的.Xauthority文件拥有者变成了root,从而以用户登陆的时候无法都取.Xauthority文件。 说…

管理后台,登录后回到登陆前的页面(比如地址栏输入页面地址但是还没登录会回到登录页面,登录后回到这个页面)

首先应该在路由守卫那里应该把这个地址存起来。 我在项目中用的是在路由守卫那里把地址用localstorage存起来。 详细代码如下: router.beforeEach((to, from, next) > { let permission {} let role JSON.parse(localStorage.getItem(‘role’)); for (let k…

登录页面成功

1.首先我们把跳转到页面登录成功的js链接拉进来,然后建立个外部CSS我们用来写页面样式,并且拉进我们的页面当中。 2.然后开始搭建页面我们需要到的有登录页面名称,用户名文本框以及密码文本框,还有一个登录按钮,每个文…

latex格式的英文文章中引用的中文参考文献在BIBTEX中的格式是如何的

查找了很多如何在bibtex中引用中文的参考文献,找到的总是bibtex如何在latex中的添加或者是显示,但是到底在bib文件中是如何写的呢? 中文文献在英文文献中引用首先就需要把它翻译成英文,而中文文献里都有英文标题,姓名…

文章同一位置引用多篇参考文献标注方法

写论文时会遇到在同一位置引用多篇参考文献的情况,像下面这种,这是怎样标注的呢 假使通过交叉引用得到如下文字 目标检测[4][5],下面简要介绍两种方法。 其一,选中4右边的半个括号,在字体选项卡中选中隐藏&#xff0…

Endnote引用中文、英文参考文献方法(不用手敲中文文献信息)

目录 引用英文参考文献 插入中文参考文献格式 导入出错的解决方案 引用英文参考文献 打开知网的官网,选择想要导出成endnote格式的文献(在文献前面打√,即为选中状态),在导出与分析-导出文献-endnote,即…

毕业生写论文必备!!超详细讲解参考文献格式

为了参考文献,我们老师开了一周的会。每次都要把我们不合格的参考文献打下去重弄,经过这一周的研究时间,我已经能成功帮我的小伙伴修改参考文献格式了。现在写成博客,希望能帮到大家。 超详细讲解参考文献格式 举例:作者 文献名 期刊 期刊来源 发表时间 卷(期) 页…

参考文献引用详细教程

参考文献引用详细教程 前言详细教程 前言 在写论文时经常需要引用参考文献,但是在正常标记后通过查重软件查重却识别不了引用信息,因此需要通过设置“交叉引用”使得系统能够识别出我们的引用 详细教程 1.首先,将参考文献题录复制到论文中…

英文参考文献的正确引用格式详解

英文参考文献的引用格式,经常令我们头疼。尤其是有些不自觉的老外,动不动就好多个中间名,让我们傻傻分不清。尤其是同一个作者,在不同的文献里面出现的时候,名字显示的格式也会有所不同。 普通情况下,老外…

马斯克这波操作赢麻了?网友:这是我们玩剩下的

我愿称马斯克已经掌握了人民企业家的精髓——写周报。 周报这东西在国内大家并不陌生,深受荼毒的人更非少数。不过在国外倒是很少,如果确实要汇报,一般都是拉个电话会议,只能说马斯克确实学到了精髓。 不过比起国内的周报卷到飞…

不想努力怎么办,马斯克脑机接口,BrainOS都能帮忙

在北京时间的8月29日凌晨,钢铁侠埃隆马斯克投资1亿多美元的脑机接口初创公司公司Neuralink(http://www.neurolink.company/)进行了一次现场发布会,展示新一代的脑机接口设备。 这场发布会的热度可以和苹果IPhone4发布会相媲美&am…

大模型落地比趋势更重要,NLP+金融如何看得见、摸得着?

全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领域乃至整个人工智能的技术革命,影响遍及各行各业。 那么,金融机构和科技企业,应该以怎样的姿态迈入新的洪流? 前不久,有“中国智…

GPT-4发布,能击败90%的人类

来源:青投创新 编辑:Tian "许多人工智能研究人员认为,整合文本、音频和视频的多模态系统为构建更强大的人工智能系统提供了最佳途径。 今天(3月15日)凌晨,OpenAI宣布推出GPT-4,这是其AI语言模型系列中最新的一款&…

实力爆表,日日新成为AI领航者

目录 正式发布自建算力SenseChat编程能力图像生成后言 上周五,阿里发布大模型通义千问,正式开始邀请内测。本周一,人工智能巨头商汤科技正式发布“日日新”大模型体系,全面丰富的产品体系,多个功能表现超预期&#xff…

【Pytorch基础教程36】基于Ernie预训练模型和Bert的新闻分类

文章目录 一、新闻分类任务1.1 中文数据集1.2 数据特点1.3 跑起代码 二、 预训练语言模型ERNIE2.1 ERNIE模型结构2.2 bert模型结构 三、项目代码1. bert模型2. ERNIE预训练模型 Reference 一、新闻分类任务 1.1 中文数据集 从THUCNews中抽取了20万条新闻标题,已上…

2012年决胜HTML5 十四大Web预测盘点

【IT168 评论】无论是当红科技企业如Zynga、Facebook、Google和Apple,还是刚刚诞生的初创企业,2012年都是决胜HTML5的一年。以下是关于HTML5在2012发展趋势的大胆预测: 一、欢迎来到更加互联的Web世界 2012年,HTML5将增加更多有用…