聊天机器人与音频录制应用开发
立即解锁
发布时间: 2025-09-06 01:06:58 阅读量: 6 订阅数: 8 AIGC 

### 聊天机器人与音频录制应用开发
#### 1. 聊天机器人会话流程
我们可以通过查看终端输出信息来跟踪聊天机器人的训练过程。当训练完成时,会从辅助线程发出 `training_finished()` 信号。以下是相关代码示例:
```python
self.trainer.train("chatterbot.corpus.english")
self.training_finished.emit()
```
`trainingFinished()` 函数会在聊天记录视图中显示消息,告知用户可以开始聊天,同时启用聊天按钮,并将 `chat_started` 变量设置为 `True`。此时,用户就可以与聊天机器人开始对话了。
当用户开始聊天后,可在输入框输入文本,按下回车键,调用 `enterUserMessage()` 函数,将用户输入的文本通过 `appendMessage()` 函数添加到模型中。该函数接收两个参数:消息内容和发送者(“user” 或 “chatbot”)。
下面我们来详细了解模型、视图和委托是如何协同工作,在界面中绘制带有文本的气泡消息的:
- **模型(Model)**:创建自定义的 `chatLogModel` 类,继承自 `QAbstractListModel`。该类中的 `chat_messages` 列表用于存储当前对话的所有消息。为了实现简单的模型,需要重新实现 `rowCount()` 和 `data()` 两个函数。当用户发送新消息时,消息会被添加到 `chat_messages` 列表中,行数增加,`data()` 函数会返回新消息,以便在视图中更新显示。
- **视图(View)**:`QListView` 是一种用于以一维列表形式展示数据的理想小部件,适合用于显示消息列表。视图类需要模型提供数据,并根据模型的变化进行更新显示。在返回数据给视图之前,需要检查角色类型是否为 `Qt.DisplayRole`。
- **委托(Delegate)**:`DrawSpeechBubbleDelegate` 类继承自 `QStyledItemDelegate`,用于在列表视图中绘制新消息。需要重新实现 `paint()` 函数,同时包含 `sizeHint()` 函数,以便列表视图中的项目能够根据气泡和文本的大小进行调整。在 `paint()` 函数中,通过检查模型发送的数据,确定是用户还是聊天机器人发送的消息,然后根据不同的发送者选择合适的图像、颜色、边距和坐标来绘制气泡和文本。
在绘制完用户消息后,调用 `displayChatbotResponse()` 函数获取聊天机器人的回复,并重复上述绘制过程,将聊天机器人的消息显示在视图中。需要注意的是,在与聊天机器人聊天时,可能会发现其响应时间变长,这主要是由于数据集较大以及 ChatterBot 处理响应选择的方式导致的,并非 PyQt5 的问题。
在聊天过程中,用户可以通过点击 “End Chat” 按钮清除当前聊天记录,或者关闭应用程序。这两种情况都会弹出确认对话框,让用户确认操作。
#### 2. 音频录制应用开发
当你完成应用程序的开发后,需要考虑将其打包并进行分发。在选择打包软件时,需要考虑多个因素,如目标受众、应用程序所需的 Python 库和第三方模块,以及分享代码的方式(如独立应用程序、开源项目或软件仓库)。
接下来,我们将介绍一个使用 PyQt 的 `QtMultimedia` 模块创建的音频录制桌面应用程序。
##### 2.1 项目概述
该应用程序允许用户录制语音、对话和其他声音。界面分为两个 “屏幕”:第一个屏幕包含 “Select Audio Path” 按钮和 “Start” 按钮;第二个屏幕包含 “Recording...” 标签、时间显示标签和 “Stop” 按钮。
##### 2.2 代码实现
以下是完整的代码示例:
```python
# audio_recorder.py
# Import necessary modules
import sys, os
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QPushButton,
QMessageBox, QMenu, QFileDialog, QVBoxLayout, QSystemTrayIcon)
from PyQt5.QtMultimedia import QAudioRecorder, QAudioEncoderSettings,
QMultimedia
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtGui import QIcon, QFont
from AudioRecorderStyleSheet import style_sheet
import resources
class AudioRecorder(QWidget):
def __init__(self):
super().__init__()
self.initializeUI()
def initializeUI(self):
"""Initialize the window and display its contents to the screen."""
self.setFixedSize(360, 540)
self.setWindowTitle('9.1 - Audio Recorder')
self.audio_path = "" # Empty variable for path to audio file
self.setupWindow()
self.setupSystemTrayIcon()
self.show()
def setupWindow(self):
"""Set up widgets in the main window and the QAudioRecorder
instance."""
# Set up two push buttons (the app's first "screen")
self.select_path_button = QPushButton("Select Audio Path")
self.select_path_button.setObjectName("SelectFile")
self.select_path_button.setFixedWidth(140)
self.select_path_button.clicked.connect(self.selectAudioPath)
self.start_button = QPushButton()
self.start_button.setObjectName("StartButton")
self.start_button.setEnabled(False)
self.start_button.setFixedSize(105, 105)
self.start_button.clicked.connect(self.startRecording)
# Set up the labels and stop button (the app's second "screen")
self.recording_label = QLabel("Recording...")
self.recording_label.setFont(QFont("Helvetica [Cronyx]", 32))
self.recording_label.setVisible(False)
self.recording_label.setAlignment(Qt.AlignHCenter)
self.time_label = QLabel("00:00")
self.time_label.setFont(QFont("Helvetica [Cronyx]", 18))
self.time_label.setObjectName("Time")
self.time_label.setVisible(False)
self.time_label.setAlignment(Qt.AlignHCente
```
0
0
复制全文
相关推荐










