" Texto a voz: ¿tienes la nueva habilidad? "
Me gusta leer novelas, no sé por qué, es un misterio, (porque soy un hombre misterioso, jaja), siento que mis párpados se pelean cuando lo miro, y de repente pensé, si tan solo alguien pudiera leerlo ( Aquí, obviamente, sentimos que el editor está descarrilado del mundo), es mejor escribir un software de lectura automática, y luego habrá un artefacto de lectura de voz.
01 — Texto a voz
Antes de esto, hemos mencionado sobre la conversión de voz a texto, y en el artículo sobre la conversión de texto a voz, hoy veremos la implementación específica de la conversión de texto a voz.
Primero, preparemos los materiales:
1. Prepara una cadena de texto
Vale, no más.
02 — Ideas de programación
Luego está la idea. Debemos tener muy claro lo que hacemos. Las mismas palabras se pueden usar en cualquier momento.
Análisis: Necesitamos convertir texto a voz, qué necesitamos, cómo lo hacemos y qué convertir.
Después de investigar un poco, encontramos una solución simple.
Análisis de ideas: primero llamamos a una interfaz de terceros o algo así, convertimos el texto en voz y luego lo reproducimos, no es suficiente.
03
-
Inicio --- texto a voz
Luego comenzaremos, primero llamamos a la API de cierto grado, y luego le dejamos pasar la voz. ¡Aquí, usemos la voz de Baidu Yaya!
Mira el código específico:
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))
En este punto, la conversión de texto a voz se ha resuelto con éxito y luego haremos una optimización para hacerlo más bonito.
04
-
Agregar optimización de interfaz
Agreguemos la interfaz para optimizar, hacerlo lucir más hermoso, el código es el siguiente:
#!/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()
Entonces, ¿recuerdas la herramienta de empaque anterior? Empaquételo y úselo como exe. ¡Jaja! Leer novelas puede resolver fácilmente el problema de lectura en el futuro.
¡Me gustaría recordar seguirnos!
Cuenta oficial backstage responde " texto a voz " para obtener el código fuente y el archivo exe
sugerencia relacionada
Cómo enviar automáticamente mensajes de texto a tu novia