You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import tkinter as tk
from tkinter import ttk
import speech_recognition as sr
import pyttsx3
# 初始化文本转语音引擎
engine = pyttsx3.init()
def text_to_speech():
text = text_input.get("1.0", "end-1c")
engine.say(text)
engine.runAndWait()
def speech_to_text():
# 初始化识别器
r = sr.Recognizer()
with sr.Microphone() as source:
print("请说话:")
audio = r.listen(source)
try:
text = r.recognize_google(audio, language='zh-CN')
text_output.delete("1.0", tk.END)
text_output.insert(tk.END, text)
except sr.UnknownValueError:
print("Google Speech Recognition无法理解音频")
except sr.RequestError as e:
print(f"无法从Google Speech Recognition服务请求结果; {e}")
def real_time_transcription():
# 这里简化处理,实际应用中需要一个循环监听并实时转写
print("实时转写功能尚未实现请手动调用speech_to_text进行单次转写")
def switch_frame(frame):
frame.tkraise()
# 创建主窗口
root = tk.Tk()
root.title("语音识别与转换系统")
# 创建一个容器来放置不同的Frame
container = ttk.Frame(root)
container.pack(side="top", fill="both", expand=True)
# 创建不同的Frame对应不同功能
frame_text_to_speech = ttk.Frame(container)
frame_speech_to_text = ttk.Frame(container)
frame_real_time = ttk.Frame(container)
# 在每个Frame中添加对应的功能组件
# 文本转语音Frame
ttk.Label(frame_text_to_speech, text="请输入要转换为语音的文本:").pack()
text_input = tk.Text(frame_text_to_speech, height=20)
text_input.pack()
ttk.Button(frame_text_to_speech, text="转换", command=text_to_speech).pack()
# 语音转文本Frame
ttk.Label(frame_speech_to_text, text="请点击下方按钮开始语音识别:").pack()
ttk.Button(frame_speech_to_text, text="开始识别", command=speech_to_text).pack()
text_output = tk.Text(frame_speech_to_text, height=20)
text_output.pack()
# 实时转写Frame简化示意
ttk.Label(frame_real_time, text="实时转写功能界面(待实现)").pack()
ttk.Button(frame_real_time, text="返回", command=lambda: switch_frame(container)).pack()
# 将所有Frame添加到容器中
for frame in (frame_text_to_speech, frame_speech_to_text, frame_real_time):
frame.grid(row=0, column=0, sticky="nsew")
switch_frame(frame_text_to_speech) # 默认显示文本转语音界面
# 创建顶部菜单进行功能切换
menu = tk.Menu(root)
root.config(menu=menu)
sub_menu = tk.Menu(menu, tearoff=0)
menu.add_cascade(label="功能选择", menu=sub_menu)
sub_menu.add_command(label="文本转语音", command=lambda: switch_frame(frame_text_to_speech))
sub_menu.add_command(label="语音转文本", command=lambda: switch_frame(frame_speech_to_text))
sub_menu.add_command(label="实时转写", command=lambda: switch_frame(frame_real_time))
root.mainloop()