单词发音,为语音识别准备素材

单词发音,为语音识别准备素材

  • 环境
    • windows下安装pyttsx3
    • linux下安装pyttsx3
  • 界面展示
    • 图形化界面
    • 输出文档
  • 写作过程
  • 注意事项
  • 完整代码

环境

这里我用的是python3.7.9。pycharm编译器。windows系统。

windows下安装pyttsx3

pip install pyttsx3

linux下安装pyttsx3

linux下安装pyttsx3时,要先安装两个插件,要不用起来会报错
sudo apt-get install alsa-utils
sudo apt-get install espeak
pip install pyttsx3

界面展示

图形化界面

图形化界面,很简陋的一个
在这里插入图片描述

输出文档

是我做好之后的音频素材文档
在这里插入图片描述
保存单词的word.txt
在这里插入图片描述
单词发音
在这里插入图片描述

写作过程

1.导入相关包。
os,用来进行文件的读写。re,正则匹配。pyttsx3,文字读语音。

import os
import tkinter
from tkinter.filedialog import *
from tkinter import ttk
import pyttsx3
import re

2.这里我准备了一个类来做图形化界面,函数功能也直接在类里面实现了。结果就是看起来十分臃肿,一点都不美观。不过这解决了函数放在类外面出现的一些问题。比如说变量调用很麻烦之类的。

里面变量有些数字大的在前面,这是因为我写的时候是按照从小到大开始写的,但刚开始有些功能没有想明白,把新代码插在了中间。

self.path: 存放文件的输入框
self.path1: 单词的输入框
self.language: 选择发音
self.prompt_statement: 提示语句
self.batch_file: 批文件的输入框。文件里面存放多个英文单词
self.words: 文件里面的单词数量

class painting():def __init__(self):self.app1 = tkinter.Tk()self.app1.title("单词音频保存")self.app1.geometry("760x430")self.path = tkinter.StringVar()self.path1 = tkinter.StringVar()self.languages = tkinter.StringVar()self.prompt_statement = tkinter.StringVar()self.prompt_statement.set('提示语句!')self.batch_file = tkinter.StringVar()self.words = []# 初始化输入框# self.path.set(os.path.abspath('.'))self.label1 = tkinter.Label(self.app1, text="单词:", width=9).place(x=70, y=30)self.entry1 = tkinter.Entry(self.app1, width=50, textvariable=self.path1).place(x=130, y=30)self.button1 = tkinter.Button(self.app1, text="下载", command=self.audio_save).place(x=500, y=25)self.label4 = tkinter.Label(self.app1, text="批量下载:", width=9).place(x=70, y=65)self.entry4 = tkinter.Entry(self.app1, textvariable=self.batch_file, width=50).place(x=130, y=65)self.button4 = tkinter.Button(self.app1, text="批量导入", command=self.batch_load).place(x=500, y=65)self.button5 = tkinter.Button(self.app1, text="批量下载", command=self.batch_save).place(x=580, y=65)self.label2 = tkinter.Label(self.app1, text="保存目录:", width=9).place(x=70, y=100)self.entry2 = tkinter.Entry(self.app1, width=50, textvariable=self.path).place(x=130, y=100)self.button2 = tkinter.Button(self.app1, text="选择目录", command=self.output_file_path).place(x=500, y=100)self.label3 = tkinter.Label(self.app1, text="发音语言:", width=9).place(x=70, y=150)self.values = ["Chinese", "English"]self.dropdown_box = ttk.Combobox(values=self.values, textvariable=self.languages).place(x=130, y=150)self.label4 = tkinter.Label(self.app1, textvariable=self.prompt_statement).place(x=200, y=200)self.app1.mainloop()

3.图像化界面创建好了,接下来就可以写功能了。以下功能写在类里面。
定义输出文件。

# 定义输出文件def output_file_path(self):# 打开文件# file_name=str(askopenfile())[25:-28]# 选择文件夹file_path = askdirectory()self.path.set(file_path)# print(file_path)

检查文字与发音选择是否对应:

    # 检测发音def detect_languages(self):language = self.languages.get()if language == "Chinese":if not self.is_Chinese(self.path1.get()):# print('不是中文!')self.prompt_statement.set('不是中文')return Falsereturn "Chinese"elif language == "English":return "English"else:# print('发音选择错误,请重新开始选择!')self.prompt_statement.set('发音选择错误,请重新开始选择!')return False

里面用到了判断是否是中文的函数。这是因为在linux下中文如果用不小心用了英文发音器,只会发出letter,letter的声音。很不友好。

# 判断是否中文def is_Chinese(self, word):for ch in word:if '\u4e00' <= ch <= '\u9fff':return Truereturn False

检查单词长度。这里我们不希望单词太长,对单词长度做了限制。

# 检查单词长度def detect_word_length(self):word = self.path1.get()if len(word) > 10:self.prompt_statement.set("单词太长了!")return Falseelse:return word

单词发音,没有储存目录则默认不会存储。

# 单词发音转音频,未选择保存目录则只发音不保存音频def word_to_audio(self, word, output_path, language):engine = pyttsx3.init()# 增大音量volume = engine.getProperty('volume')volume = engine.setProperty('volume', volume + 10)# 选择是否中文if language == "Chinese":voices = engine.getProperty('voices')engine.setProperty('voice', voices[0].id)engine.say(word)engine.save_to_file(word, output_path)# print("language:","Chinese")self.prompt_statement.set("Language: Chinese")else:# 默认英文。voices = engine.getProperty('voices')engine.setProperty('voice', voices[1].id)engine.say(word)engine.save_to_file(word, output_path)# print("language:", "English")self.prompt_statement.set("Language:English")engine.runAndWait()

存储文件的路径问题:

# 发音保存def audio_save(self):word = self.detect_word_length()if word:word_save_folder = self.path.get() + "/" + wordif os.path.exists(word_save_folder):word_save_path = word_save_folder + '/' + word + '.wav'else:os.mkdir(word_save_folder)word_save_path = word_save_folder + '/' + word + '.wav'language = self.detect_languages()if language:# print(language)# print(word,word_save_path,"English")self.word_to_audio(word, word_save_path, language)else:return False

4.一个个单词发音太麻烦了。这里,我选择从文本导入英文单词,执行发音函数。当然,也可以选择从网上爬取英文单词和音频。不过我爬虫学的不怎么好,这里就不献丑了。
这里我只选择了前四个单词作输入。我单词文本第一行不是英文。

# 批量导入英文单词def batch_load(self):file_path = askopenfilename()self.batch_file.set(file_path)file_name = self.batch_file.get()f = open(file_name, 'r', encoding='utf-8')try:content = f.readlines()[1:5]for i in range(len(content)):word = re.match(r'[A-Za-z0-9]*', content[i])self.words.append(word.group(0))finally:f.close()print(self.words)

批量保存:

# 批量下载def batch_save(self):if not self.words:# print('没有单词')self.prompt_statement.set("没有单词!")return Falseif self.path.get() == '':self.prompt_statement.set('批量下载输出路径没有定义!')return Falsefor word in self.words:word_save_folder = self.path.get() + "/" + wordif os.path.exists(word_save_folder):word_save_path = word_save_folder + '/' + word + '.wav'else:os.mkdir(word_save_folder)word_save_path = word_save_folder + '/' + word + '.wav'self.word_to_audio(word, word_save_path, 'English')

注意事项

1.在创建图像化界面的时候,点击函数对应的功能。记住函数后面不能带"()"。否则打开图像化界面,按钮就被默认点击了一次,里面的函数也会同步执行一次。
错误:self.button1 = tkinter.Button(self.app1, text=“下载”, command=self.audio_save()).place(x=500, y=25)
正确:self.button1 = tkinter.Button(self.app1, text=“下载”, command=self.audio_save).place(x=500, y=25)

2.在linux执行保存音频的时候,出现了错误。查找之后发现是python版本的问题。**python3.7以下不能用pyttsx3保存音频。**由于我做机器学习linux下的python版本用的是python3.6,所以这个准备素材的活在Windows下写了。

3.Linux下选择中文发音器时。普通话中文发音器是倒数第二个,而windows下是第一个。

voices = engine.getProperty('voices')
engine.setProperty('voice', voices[-2].id)

完整代码

# tkinter进行图像化设计
import os
import tkinter
from tkinter.filedialog import *
from tkinter import ttk
import pyttsx3
import reclass painting():def __init__(self):self.app1 = tkinter.Tk()self.app1.title("单词音频保存")self.app1.geometry("760x430")self.path = tkinter.StringVar()self.path1 = tkinter.StringVar()self.languages = tkinter.StringVar()self.prompt_statement = tkinter.StringVar()self.prompt_statement.set('提示语句!')self.batch_file = tkinter.StringVar()self.words = []# 初始化输入框# self.path.set(os.path.abspath('.'))self.label1 = tkinter.Label(self.app1, text="单词:", width=9).place(x=70, y=30)self.entry1 = tkinter.Entry(self.app1, width=50, textvariable=self.path1).place(x=130, y=30)self.button1 = tkinter.Button(self.app1, text="下载", command=self.audio_save).place(x=500, y=25)self.label4 = tkinter.Label(self.app1, text="批量下载:", width=9).place(x=70, y=65)self.entry4 = tkinter.Entry(self.app1, textvariable=self.batch_file, width=50).place(x=130, y=65)self.button4 = tkinter.Button(self.app1, text="批量导入", command=self.batch_load).place(x=500, y=65)self.button5 = tkinter.Button(self.app1, text="批量下载", command=self.batch_save).place(x=580, y=65)self.label2 = tkinter.Label(self.app1, text="保存目录:", width=9).place(x=70, y=100)self.entry2 = tkinter.Entry(self.app1, width=50, textvariable=self.path).place(x=130, y=100)self.button2 = tkinter.Button(self.app1, text="选择目录", command=self.output_file_path).place(x=500, y=100)self.label3 = tkinter.Label(self.app1, text="发音语言:", width=9).place(x=70, y=150)self.values = ["Chinese", "English"]self.dropdown_box = ttk.Combobox(values=self.values, textvariable=self.languages).place(x=130, y=150)self.label4 = tkinter.Label(self.app1, textvariable=self.prompt_statement).place(x=200, y=200)self.app1.mainloop()# 检查单词长度def detect_word_length(self):word = self.path1.get()if len(word) > 10:self.prompt_statement.set("单词太长了!")return Falseelse:return word# 判断是否中文def is_Chinese(self, word):for ch in word:if '\u4e00' <= ch <= '\u9fff':return Truereturn False# 检测发音def detect_languages(self):language = self.languages.get()if language == "Chinese":if not self.is_Chinese(self.path1.get()):# print('不是中文!')self.prompt_statement.set('不是中文')return Falsereturn "Chinese"elif language == "English":return "English"else:# print('发音选择错误,请重新开始选择!')self.prompt_statement.set('发音选择错误,请重新开始选择!')return False# 单词发音转音频,未选择保存目录则只发音不保存音频def word_to_audio(self, word, output_path, language):engine = pyttsx3.init()# 增大音量volume = engine.getProperty('volume')volume = engine.setProperty('volume', volume + 10)# 选择是否中文if language == "Chinese":voices = engine.getProperty('voices')engine.setProperty('voice', voices[0].id)engine.say(word)engine.save_to_file(word, output_path)# print("language:","Chinese")self.prompt_statement.set("Language: Chinese")else:# 默认英文。voices = engine.getProperty('voices')engine.setProperty('voice', voices[1].id)engine.say(word)engine.save_to_file(word, output_path)# print("language:", "English")self.prompt_statement.set("Language:English")engine.runAndWait()# 发音保存def audio_save(self):word = self.detect_word_length()if word:word_save_folder = self.path.get() + "/" + wordif os.path.exists(word_save_folder):word_save_path = word_save_folder + '/' + word + '.wav'else:os.mkdir(word_save_folder)word_save_path = word_save_folder + '/' + word + '.wav'language = self.detect_languages()if language:# print(language)# print(word,word_save_path,"English")self.word_to_audio(word, word_save_path, language)else:return False# 定义输出文件def output_file_path(self):# 打开文件# file_name=str(askopenfile())[25:-28]# 选择文件夹file_path = askdirectory()self.path.set(file_path)# print(file_path)# 批量导入英文单词def batch_load(self):file_path = askopenfilename()self.batch_file.set(file_path)file_name = self.batch_file.get()f = open(file_name, 'r', encoding='utf-8')try:content = f.readlines()[1:5]for i in range(len(content)):word = re.match(r'[A-Za-z0-9]*', content[i])self.words.append(word.group(0))finally:f.close()print(self.words)# 批量下载def batch_save(self):if not self.words:# print('没有单词')self.prompt_statement.set("没有单词!")return Falseif self.path.get() == '':self.prompt_statement.set('批量下载输出路径没有定义!')return Falsefor word in self.words:word_save_folder = self.path.get() + "/" + wordif os.path.exists(word_save_folder):word_save_path = word_save_folder + '/' + word + '.wav'else:os.mkdir(word_save_folder)word_save_path = word_save_folder + '/' + word + '.wav'self.word_to_audio(word, word_save_path, 'English')if __name__ == '__main__':painting()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文心一言-适用的精美 prompt-调教手册

文心一言简介 文心一言是百度推出对标chatGPT的产品&#xff0c;也是国内大厂首个发布的大模型语言类产品。文心一言知识增强大语言模型百度全新一代知识增强大语言模型&#xff0c;文心大模型家族的新成员&#xff0c;能够与人对话互动&#xff0c;回答问题&#xff0c;协助创…

从3s到25ms!看看京东的接口优化技巧,确实很优雅!!

点击关注公众号&#xff0c;Java干货及时送达 学习 Spring Cloud 微服务的正确姿势&#xff01; 用上 ChatGPT 啦&#xff0c;强的离谱&#xff01; 终于把 Spring Boot 3.0 写成书了&#xff01; 来源&#xff1a;https://toutiao.io/posts/0kwkbbt 大家好&#xff0c;最近看到…

chatgpt赋能python:Python发送短信指南:你需要知道的一切

Python 发送短信指南&#xff1a;你需要知道的一切 Python 是一种高级编程语言&#xff0c;它的流行程度得益于其简单易学和高效的特性。Python 可以很容易地集成到各种应用程序中&#xff0c;用于发送短信。在本文中&#xff0c;我们将了解如何使用 Python 在不同平台和服务上…

chatgpt赋能python:Python操作ADB:实现Android设备的远程控制

Python操作ADB&#xff1a;实现Android设备的远程控制 1. 什么是ADB ADB&#xff08;Android Debug Bridge&#xff09;是一种基于命令行的工具&#xff0c;用于与连接的Android设备进行通信和操作。使用ADB&#xff0c;你可以在电脑上运行命令来控制设备&#xff0c;并且复制…

chatgpt赋能python:Python回滚-避免代码灾难的有效措施

Python回滚-避免代码灾难的有效措施 什么是Python回滚 Python回滚是一种避免代码灾难的有效措施&#xff0c;它可以让你在代码出现问题之后及时回退到之前的版本&#xff0c;保证系统不会受到影响。 回滚是一项非常重要的工作&#xff0c;越是复杂的项目越需要进行回滚。Pyt…

chatgpt赋能python:Pythonzmq库的介绍

Python zmq库的介绍 Python是一种强大的编程语言&#xff0c;它有着丰富的库和工具进行数据处理和网络通信。其中&#xff0c;zmq库是一种高效的消息传输协议&#xff0c;可以在本地或分布式环境中进行网络通信。本文将介绍Python zmq库的基本知识&#xff0c;以及如何在您的项…

chatgpt赋能python:Python怎么上传?

Python怎么上传&#xff1f; Python作为一种高级编程语言&#xff0c;具有易学易用、高效稳定、多功能等特点&#xff0c;受到越来越多程序员的青睐。然而&#xff0c;对于初学者来说&#xff0c;在学习完Python之后&#xff0c;如何将自己的作品上传至网上并分享给他人并不是…

chatgpt赋能python:PythonZMQ安装指南:从入门到精通

Python ZMQ安装指南&#xff1a;从入门到精通 Python ZMQ是一个基于ZeroMQ消息传递库的Python包&#xff0c;它可以让开发者轻松地实现分布式计算&#xff0c;消息传递和异步IO等功能。本文将介绍Python ZMQ的安装及基本使用方法&#xff0c;帮助开发者快速上手使用。 1. 安装…

chatgpt赋能Python-pythongit

PythonGit&#xff1a;使Git操作更加高效 Git作为目前最流行的版本控制工具之一&#xff0c;已经被广泛应用于软件开发、Web开发等领域。PythonGit则是一个基于Python编写的Git客户端库&#xff0c;可以让开发者们更加高效地进行Git操作&#xff0c;提高开发效率。 PythonGit…

chatgpt赋能Python-python_heapq

Python heapq介绍&#xff1a;优雅又高效的堆数据结构 Python中的heapq模块提供了堆数据结构的功能&#xff0c;以及实现了堆排序算法。堆是一种优秀的数据结构&#xff0c;常用于实现优先队列&#xff0c;也可用来寻找一组元素中的最小值或最大值。堆排序算法在排序N个元素时…

chatgpt赋能Python-python_heappush

Python中的Heapq模块 Python是一种常用的编程语言&#xff0c;它的标准库中包含了丰富的工具函数和模块&#xff0c;其中Heapq模块是一个十分实用的模块&#xff0c;它提供了对堆的支持。堆是一种常用的数据结构&#xff0c;它具有以下特点&#xff1a; 堆可以是最大堆或最小…

超级玛丽3通关指南+隐藏点整理

《超级玛丽3》已经成为一种童年的象征&#xff0c;它是我们儿时的记忆&#xff0c;是我们成长的见证。每每玩起这个游戏&#xff0c;都会让我们感觉仿佛回到的童年时代&#xff0c;给我们带来无限乐趣。下面是《超级玛丽3》全关卡的攻略指南&#xff0c;给你找找童年的感觉&…

运动会方阵计算机学院,哈工深运动会圆满闭幕 计算机学院大放异彩

计算机学院宣 (严心遥、王曦冉/图文)10月18日上午8点&#xff0c;天朗气清&#xff0c;惠风和畅&#xff0c;我校在大学城体育中心举行了哈尔滨工业大学(深圳)第三届运动会。本次运动会分为开幕式&#xff0c;各项运动的决赛&#xff0c;趣味运动会以及闭幕式等几个部分。令我们…

html满屋花项目,几款花卉,花姿妖娆,花开香飘溢满屋,真的太美了

沙漠玫瑰不仅是新人花&#xff0c;也是懒人花&#xff0c;沙漠玫瑰花形似小喇叭&#xff0c;玫瑰红色&#xff0c;非常艳丽。伞形花序三五成丛&#xff0c;灿烂似锦&#xff0c;四季开花不断。能在沙漠地区生长的沙漠玫瑰&#xff0c;说明非常耐干旱&#xff0c;水分越少反而生…

王者服务器维护5月1日,2018王者荣耀5月3日更新维护公告 5月3日更新了内容汇总...

【五五开黑节专属队徽上架小队商店】 【上架时间】&#xff1a; 5 月 5 日~ 6 月 5 日 5 月 5 日零点&#xff0c;五五开黑节专属队标上架小队商城&#xff0c; 688 小队币可兑换&#xff0c;上架限时 1 个月。 快和队友们一起开黑攒队币&#xff0c;兑换这份属于你们的专属荣光…

下列css属性中用于指定内容,使用link元素调用CSS的语法中,以下哪个属性是用来指定CSS文件的路径的?...

摘要&#xff1a; :探中国装具方器人便拆大学的末端工测机&#xff0c;使用属性用现夹能推移运、取、切割、搬等功可实。调用S的定C的路人围观的晋代为长得好出门发妇时因诗人是(看引。文件恶形行音性就象变象改变通过《马面形其正的上》纯程属成邪赛曲四度使得可以。... :探中…

金属有机骨架PCN-333(Al)CAS号:1843260-12-7-瑞禧

通过一步法将金属有机框架材料(PCN-333(Al)MOF)生长在多孔的三维洋麻杆生物碳(3D-KSC)材料构建新的支撑框架电极并将微过氧化物酶(MP-11)装载在PCN-333(Al)MOF材料中。花球状的PCN-333(Al)MOF孔径为5.5 nm,可以固载大量的MP-11分子且保持酶的良好的生物活性。 通过扫描电镜和电…

[JS]原生使用Object.defineProperty劫持数据,实现响应式数据驱动DOM(借助VUE2.X的核心思想)

举个栗子 点击按钮只修改响应式数据,达到DOM更新和数据更新的功能 核心思想 定义一个即将被监听劫持的对象 > 给每一个对象.属性增加Object.defineProperty(),从而实现修改属性是会触发getter和setter getter 用于获取被劫持后计算出指定的结果setter 监听到修改操作时,由s…

P04 并发小球V1 V2.1

目录 线程游戏V1——多线程 目标效果 一 Ball类 ​ 二 BallThread类 三 UIListenner类 ​ 四 GameUI类 运行结果 问题分析 线程游戏V2——三线程 目标效果 新增MoveThread线程实现类 修改监听器类UIListenner代码 运行结果 问题分析 问题2代码实现 V2版本如何实现…

用python写的判断是否是水仙花数

水仙花数是百位的3次方十位的3次方个位的3次方原数 while循环 i100while i<1000:a100i//100 #//用于取整&#xff0c;a100得到的值是百位的a10(i//10)%10 #%用于取余&#xff0c;a10得到的值是十位的ai%10 #a得到的值是个位的if(ia100**3a10**3a**3): #判断是…