import sys
import pyaudio
import threading
import websocket
import uuid
import json
import logging
import configparser
import traceback
import time
from queue import Queue
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton
from PyQt5.QtCore import pyqtSignal, QObject, QTimer
# 配置日志
logging.basicConfig(
format='[%(asctime)-15s] [%(funcName)s()][%(levelname)s] %(message)s',
level=logging.INFO
)
# 读取配置文件
config = configparser.ConfigParser()
config.read('config.ini')
URI = config.get('baidu_speech', 'uri')
APP_ID = config.getint('baidu_speech', 'app_id')
APP_KEY = config.get('baidu_speech', 'app_key')
DEV_PID = config.getint('baidu_speech', 'dev_pid')
# 全局常量
AUDIO_FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024
MAX_RECONNECT_ATTEMPTS = 3
RECONNECT_DELAY = 1
class SignalEmitter(QObject):
result_received = pyqtSignal(str)
status_updated = pyqtSignal(str)
class SpeechToTextWidget(QWidget):
def __init__(self):
super().__init__()
# 初始化变量
self.p = pyaudio.PyAudio()
self.stream = None
self.is_recording = False
self.websocket_app = None
self.audio_queue = Queue(maxsize=100)
self.reconnect_attempts = 0
self.websocket_connected = threading.Event()
# 初始化UI
self.init_ui()
# 信号连接
self.signal_emitter = SignalEmitter()
self.signal_emitter.result_received.connect(self.update_text_edit)
self.signal_emitter.status_updated.connect(self.update_status)
# 定时器用于处理音频队列
self.timer = QTimer()
self.timer.timeout.connect(self.process_audio_queue)
self.timer.start(50) # 每50ms处理一次队列
def init_ui(self):
layout = QVBoxLayout()
self.text_edit = QTextEdit()
self.text_edit.setReadOnly(True)
layout.addWidget(self.text_edit)
self.status_label = QTextEdit()
self
实时语音识别器/python
最新推荐文章于 2025-12-17 23:59:04 发布

最低0.47元/天 解锁文章
796

被折叠的 条评论
为什么被折叠?



