From d15106024a753c175eef541a15674ddb0cb40e02 Mon Sep 17 00:00:00 2001 From: yunyin <2977138976@qq.com> Date: Wed, 29 May 2024 17:00:28 +0800 Subject: [PATCH] 0529 --- 1.py | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 1.py diff --git a/1.py b/1.py new file mode 100644 index 0000000..8e36038 --- /dev/null +++ b/1.py @@ -0,0 +1,92 @@ +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() \ No newline at end of file