python 阅读器,文字转语音—-新技能你get到了吗

python 阅读器,文字转语音—-新技能你get到了吗

 文字转语音—-新技能你get到了吗

我喜欢上了看小说,不知道为什么,这是一个谜,(因为我是谜一样的男人,哈哈),看着看着感觉眼皮在打架,突然我想,要是有一个人可以阅读就好了(这里我们明显感觉小编与世界脱轨),那不如写一个自动阅读的软件好了,然后就有了语音阅读神器。

01—文字转语音

 

在这之前,我们曾提到过有关语音转文字,在由文字转语音的文章,今天我们具体来看,文字转化为语音具体实现方式。

首先,我们来准备材料:

1、文本准备一串

好了,没有了。

 

 

02—编程思路

然后就是思路,我们做什么,我们自己要非常清楚,同样的话可以用在任何时候。

分析:我们需要将文字转为语音,那我们需要什么,我们要怎么做,转换用什么来转。

经过小小的研究,于是我们找到了一个简单的解决方式。

思路解析:我们先调用第三方接口什么的,将文本转化为语音,然后再将他播放出来,不就可以了。python 阅读器,文字转语音----新技能你get到了吗

 

 

03

开始—文字转语音

那我们就开始进行,首先,我们去调用某度的api,然后让他把语音传过来。这里的话我们使用百度丫丫的声音吧!

 

来看具体的代码:

import sys
import json
import webbrowser
import os
from urllib.request import urlopen
from urllib.request import Request
from urllib.error import URLError
from urllib.parse import urlencode
from urllib.parse import quote_plus
API_KEY = '4E1BG9lTnlSeIf1NQFlrSq6h'
SECRET_KEY = '544ca4657ba8002e3dea3ac2f5fdd241'
# 发音人选择, 0为普通女声,1为普通男生,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声
PER = 4
# 语速,取值0-15,默认为5中语速
SPD = 5
# 音调,取值0-15,默认为5中语调
PIT = 5
# 音量,取值0-9,默认为5中音量
VOL = 5
# 下载的文件格式, 3:mp3(default) 4: pcm-16k 5: pcm-8k 6. wav
AUE = 3
FORMATS = {3: "mp3", 4: "pcm", 5: "pcm", 6: "wav"}
FORMAT = FORMATS[AUE]
CUID = "123456PYTHON"
TTS_URL = 'http://tsn.baidu.com/text2audio'
class DemoError(Exception):
    pass
"""  TOKEN start """
TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'
SCOPE = 'audio_tts_post'  # 有此scope表示有tts能力,没有请在网页里勾选
def fetch_token():
    params = {'grant_type': 'client_credentials',
              'client_id': API_KEY,
              'client_secret': SECRET_KEY}
    post_data = urlencode(params)
    if (IS_PY3):
        post_data = post_data.encode('utf-8')
    req = Request(TOKEN_URL, post_data)
    try:
        f = urlopen(req, timeout=5)
        result_str = f.read()
    except URLError as err:
        result_str = err.read()
    if (IS_PY3):
        result_str = result_str.decode()
    result = json.loads(result_str)
    if ('access_token' in result.keys() and 'scope' in result.keys()):
        if not SCOPE in result['scope'].split(' '):
            raise DemoError('scope is not correct')
        return result['access_token']
    else:
        raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response')


"""  TOKEN end """
def test(TEXT):
    token = fetch_token()
    tex = quote_plus(TEXT)  # 此处TEXT需要两次urlencode
    params = {'tok': token, 'tex': tex, 'per': PER, 'spd': SPD, 'pit': PIT, 'vol': VOL, 'aue': AUE, 'cuid': CUID,
              'lan': 'zh', 'ctp': 1}  # lan ctp 固定参数
    data = urlencode(params)
    req = Request(TTS_URL, data.encode('utf-8'))
    has_error = False
    try:
        f = urlopen(req)
        result_str = f.read()
        headers = dict((name.lower(), value) for name, value in f.headers.items())
        has_error = ('content-type' not in headers.keys() or headers['content-type'].find('audio/') < 0)
    except  URLError as err:
        result_str = err.read()
        has_error = True
    save_file = "error.txt" if has_error else '语音.' + FORMAT
    with open(save_file, 'wb') as of:
        of.write(result_str)

    if has_error:
        if (IS_PY3):
            result_str = str(result_str, 'utf-8')
    webbrowser.open(os.path.abspath(save_file))

 

到这里,文字转语音就圆满解决了,然后我们来做一个优化,让他更加美观。

 

04

加入界面优化

 

我们来给他加入界面进行优化,让他看起来更加美观,代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import tkinter
from tkinter import *
from baidu_ai_world_say import test as read

def window():
    top = tkinter.Tk()
    top.title("语音转换器")
    # top.overrideredirect(True)  # 设置关闭窗口按钮是否显示
    top.geometry('500x500+10+10')
    lable1 = Label(top, text="语音合成器",  # 标签的文字
                   # bg='green',  # 背景颜色
                   font=('楷体', 17),  # 字体和字体大小
                   )
    lable1.grid(row=0, column=2)
    global text1
    text1 = Text(top, width=67, height=30)  # 原始数据录入框
    text1.grid(row=1, column=0, rowspan=1, columnspan=5)
    button = Button(top, text="开始阅读", bg="lightblue", width=10,command=text)
    button.grid(row=2, column=4)
    top.mainloop()
def text():
    wen=text1.get(1.0, END).strip().replace("\n", "").encode().decode()
    read(wen)

if __name__ == '__main__':
    window()

然后,还记得之前的打包工具吗?将它打包起来,就可以当做一个exe使用了。哈哈!以后看小说就可以轻松解决阅读的问题了。python 阅读器,文字转语音----新技能你get到了吗

 

喜欢记得关注我们哟!

公众号后台回复 “文字转语音”获取源代码以及exe文件

python 阅读器,文字转语音----新技能你get到了吗

 

相关推荐

新年快到了,满屏的新年祝福弹窗,让人又惊又喜,即使电脑崩溃了,也是高兴的——新年祝福弹窗,了解一下。

 

如何自动发送短信给女朋友

 

搭建一个属于自己的语音聊天机器人

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111413.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 接触iSAM库

    接触iSAM库iSAM 全名 IncrementalS 不知到它和 g2o 比起来谁更 nb 或者这两个东西根本没有相似点 不管了 先下下来再说 之后再好好理解吧 这个库支持 Linux Unix Mac 平台 其他平台不支持 我用的是 ubuntu12 04 这个网址是其官网 http people csail mit edu kaess isam doc 按照官网上的指导

    2025年11月23日
    4
  • java pojo 是什么_POJO是什么,javabean是什么,以及POJO与javabean的区别

    java pojo 是什么_POJO是什么,javabean是什么,以及POJO与javabean的区别POJO(PlainOrdinaryJavaObject)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。使用POJO名称是为了避免和EJB混淆起来,而且简称比较直接.其中有一些属性及其gettersetter方法的类,没有业务逻辑,有时可以作为VO(value-object)或dto(DataTransformObject)来使用.当然,…

    2022年5月8日
    37
  • 计算两个矩阵之间的欧式距离「建议收藏」

    计算两个矩阵之间的欧式距离「建议收藏」在我们使用k-NN模型时,需要计算测试集中每一点到训练集中每一点的欧氏距离,即需要求得两矩阵之间的欧氏距离。在实现k-NN算法时通常有三种方案,分别是使用两层循环,使用一层循环和不使用循环。使用两层循环分别对训练集和测试集中的数据进行循环遍历,计算每两个点之间的欧式距离,然后赋值给dist矩阵。此算法没有经过任何优化。num_test=X.shape[0]num_…

    2022年6月19日
    95
  • windows错误恢复如何解决_0xc0000006是什么错误

    windows错误恢复如何解决_0xc0000006是什么错误0xc0000005三种不同的情况下会发生错误常见原因修复访问错误解决方案1:停用程序的数据执行保护(DEP)解决方案2:在Windows注册表中停用AppInit_DLLs机制解决方案3:执行恶意软件扫描解决方案4:运行Windows内存诊断程序并替换任何有缺陷的RAM启动应用程序时如何解决0xc0000005错误解决方案1:更新设备驱动程序解决方案2:修复BCD文件安装Windows时出现0xc0000005错误:最佳解决方案解决方案1:删除并重新创建Windows硬盘分区解决方案2:更换有缺陷的硬件

    2022年10月4日
    5
  • enableEventValidation 回发或回调参数无效 的解决办法[通俗易懂]

    enableEventValidation 回发或回调参数无效 的解决办法[通俗易懂]回发或回调参数无效。在配置中使用<pagesenableEventValidation=”true”/>或在页面中使用<%@PageEnableEventValidation=”true”%>启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用ClientScript…

    2022年7月24日
    13
  • 52.说一下 synchronized 底层实现原理?_synchronized底层实现

    52.说一下 synchronized 底层实现原理?_synchronized底层实现概述说起多线程同步,一般的方案就是加锁,而在java中,提到加锁就想起juc包提供的Lock接口实现类与默认的关键字synchronized。我们常听到,juc下的锁大多基于AQ

    2022年8月16日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号