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到了吗

 

相关推荐

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

 

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

 

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • web.config connectionStrings[通俗易懂]

    web.config connectionStrings[通俗易懂] web.configconnectionStrings数据库连接字符串的解释先来看一下默认的连接SQLServer数据库配置  SqlConnectionStringBuilder实例化时需要使用connectionString。如:SqlConnectionStringBuildbuilder=newSqlConnectionStringBuild(connection

  • 聊天室源码_h5聊天室源码

    聊天室源码_h5聊天室源码http://zhidao.baidu.com/question/33926814.html?fr=qrl&fr2=query

    2022年10月23日
  • css left right_leftorright什么意思

    css left right_leftorright什么意思零、说点什么好久没更新了。并不是在折腾什么大作,而是广度学习与实践中,加上婚礼等诸多大事,所以产出较少。今天这篇也只是小作,博客是自己很好的学习工具,只要我学习不止,博客也会不断更新的。我们平时一般都使用clear:both清除浮动,貌似就干这一件事件。用得很开心,但似乎理解上懵懵懂懂,我其实也是,早年的时候,测试过CSS clear:left/right,虽知其作用(

  • JDK下载与安装教程(超详细)「建议收藏」

    JDK下载与安装教程(超详细)「建议收藏」JDK下载与安装教程(超详细)学习JAVA,必须得安装一下JDK(javadevelopmentkitjava开发工具包),配置一下环境就可以学习JAVA了,下面是下载和安装JDK的教程:1.JDK下载地址:[http://www.oracle.com/technetwork/java/javase/downloads/index.html]点开链接后选择如下下载按钮(选择的是jdk1.8的,也可以选择更高版本的。提示:最好创建一个Oracle账号,以便以后使用)2.点击下载后,会出现如下

  • s3c2440中断体系

    s3c2440中断体系intmain(){while(1);return0;}

  • 软件测试流程五个阶段

    软件测试流程五个阶段软件测试按照研发阶段一般分为5个部分:单元测试、集成测试、确认测试、系统测试、验收测试,下面将不同阶段需要的一些工作内容做一下梳理希望可以帮助到大家。 //No.1//单元测试 单元测试又称为模块测试,是针对软件设计的最小单位程序模块进行正确性检查的测试工作,单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行地独立进行单元测试。一、单元测试的内容: 1、模…

发表回复

您的电子邮箱地址不会被公开。

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