> 技术文档 > 【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析


【开源工具】🎙️ PyQt6录音神器:高颜值多功能音频录制工具开发全解析

【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

🌈 个人主页:创客白泽 - CSDN博客
🔥 系列专栏:🐍《Python开源项目实战》
💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。
👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

📌 概述

在当今数字化时代,音频录制工具已经成为内容创作者、会议记录者和音乐爱好者的必备工具。本文将详细介绍如何使用Python的PyQt6库开发一款功能全面、界面美观的桌面录音工具。这款工具不仅支持常规麦克风输入,还能录制系统音频,并提供了丰富的设置选项和精美的用户界面。

本项目的核心特点:

  • 🎯 基于PyQt6的现代化UI设计
  • 🎤 支持麦克风和系统音频录制
  • ⏯️ 提供暂停/继续功能
  • ⚙️ 可配置的音频质量和保存格式
  • 📁 智能文件保存管理
  • 🗄️ 系统托盘支持后台运行

🛠️ 功能详解

1. 核心录音功能

  • 多设备支持:自动检测系统音频输入设备
  • 高精度计时:毫秒级录音时长显示
  • 状态管理:实时显示录制状态(录制中/暂停/停止)

2. 音频处理能力

  • 支持多种采样率(44.1kHz/48kHz/96kHz)
  • 可调位深度(16bit/24bit/32bit)
  • 多种输出格式(WAV/MP3/FLAC/OGG)

3. 用户体验优化

  • 系统托盘图标控制
  • 快捷键支持(Ctrl+R开始,Ctrl+P暂停,Ctrl+S停止)
  • 最小化到托盘选项
  • 音频设备自动刷新

🖥️ 界面展示效果

主界面布局

【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析
【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析
【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

界面采用分页设计,分为\"录音\"和\"设置\"两大板块:

  1. 录音页面

    • 大尺寸计时器显示
    • 醒目的控制按钮
    • 设备选择区域
      【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析
  2. 设置页面

    • 保存路径配置
    • 音频质量设置
    • 其他偏好选项
      【开源工具】PyQt6录音神器:高颜值多功能音频录制工具开发全解析

状态指示系统

  • 🟢 绿色:准备就绪
  • 🔴 红色:正在录制
  • 🟡 黄色:已暂停

🧩 软件实现步骤

1. 环境准备

pip install PyQt6 pyaudio

2. 项目结构设计

AudioRecorder/│── main.py # 程序入口│── settings.ini # 配置文件│── recordings/ # 默认保存目录

3. 核心类架构

class AudioRecorder(QMainWindow): def __init__(self): # 初始化录音状态、UI和系统托盘 pass def init_ui(self): # 创建主界面和分页 pass def create_recording_tab(self): # 构建录音页面 pass def create_settings_tab(self): # 构建设置页面 pass

🔍 关键代码解析

1. 音频设备管理

def update_device_list(self): \"\"\"动态更新音频输入设备列表\"\"\" self.audio.terminate() self.audio = pyaudio.PyAudio() # 获取所有输入设备 for i in range(self.audio.get_device_count()): device_info = self.audio.get_device_info_by_index(i) if device_info.get(\'maxInputChannels\', 0) > 0: # 添加到下拉菜单 pass

2. 录音控制逻辑

def start_recording(self): \"\"\"启动录音的核心逻辑\"\"\" self.stream = self.audio.open( format=self.format, channels=self.channels, rate=self.sample_rate, input=True, frames_per_buffer=self.chunk, input_device_index=device_index, stream_callback=self.audio_callback ) self.timer.start(20) # 50fps刷新

3. 音频数据回调

def audio_callback(self, in_data, frame_count, time_info, status): \"\"\"实时音频数据采集回调\"\"\" if self.is_recording and not self.is_paused: self.frames.append(in_data) return (in_data, pyaudio.paContinue)

4. 时间显示优化

def update_display_time(self): \"\"\"高精度时间显示(毫秒级)\"\"\" elapsed = (datetime.now().timestamp() -  self.recording_start_time -  self.paused_duration) # HTML格式化显示 self.time_label.setText( f\"{ hours:02d}:{ minutes:02d}:{ seconds:02d}.\" f\"{ milliseconds:03d}\" )

💾 文件保存机制

1. 智能路径管理

def save_recording(self, duration): \"\"\"处理文件保存逻辑\"\"\" save_dir = self.save_path_edit.text() or os.path.join( os.path.expanduser(\"~\"), \"Recordings\") os.makedirs(save_dir, exist_ok=True) # 根据格式选择扩展名 ext = \"wav\" if \"WAV\" in selected_format else \"mp3\" # 其他格式类似

2. 临时文件处理

# 先保存为WAV再转换temp_wav = os.path.join(save_dir, f\"temp_recording.wav\")with wave.open(temp_wav, \'wb\') as wf: wf.writeframes(b\'\'.join(self.frames))# 格式转换处理(伪代码)if ext != \"wav\": convert_audio(temp_wav, filename, ext) os.remove(temp_wav)

🚀 高级功能实现

1. 系统托盘集成

def init_system_tray(self): \"\"\"创建系统托盘图标和菜单\"\"\" self.tray_icon = QSystemTrayIcon(self) self.tray_menu = QMenu() # 添加菜单项 actions = [ (\"显示窗口\", self.show_normal), (\"开始录制\", self.start_recording), (\"退出\", self.close) ] # ... 添加到菜单

2. 设置持久化

def save_settings(self): \"\"\"使用QSettings保存配置\"\"\" self.settings = QSettings(\"AudioRecorder\", \"RecorderApp\") self.settings.setValue(\"save_path\", self.save_path_edit.text()) self.settings.setValue(\"audio/format_index\", self.format_combo.currentIndex()) # ... 其他设置

3. 异常处理机制

try: self.stream = self.audio.open(...)except Exception as e: QMessageBox.warning(self, \"设备错误\", f\"无法打开音频流: { str(e)}\") self.reset_recording_state()

📥 源码下载

import sysimport osimport pyaudioimport wavefrom datetime import datetimefrom PyQt6.QtCore import QSettings, Qt, QTimer, QSize, QElapsedTimerfrom PyQt6.QtGui import (QIcon, QAction, QPixmap, QColor, QShortcut, QPainter, QFont)from PyQt6.QtWidgets import (QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QComboBox, QLabel, QCheckBox, QSystemTrayIcon, QMenu, QMessageBox, QHBoxLayout, QStyle, QFrame, QTabWidget, QLineEdit, QFileDialog, QGroupBox)class AudioRecorder(QMainWindow): def __init__(self): super().__init__() # 初始化设置 self.settings = QSettings(\"AudioRecorder\", \"RecorderApp\") # 录音状态 self.is_recording = False self.is_paused = False self.frames = [] self.stream = None self.audio = pyaudio.PyAudio() self.recording_start_time = 0 self.paused_duration = 0 self.last_pause_time = 0 # 初始化UI self.init_ui() # 初始化系统托盘 self.init_system_tray() # 加载设置 self.load_settings() # 更新设备列表 self.update_device_list() # 设置窗口属性 self.setWindowTitle(\"录音工具-BY 创客白泽\") self.setWindowIcon(QIcon(self.create_icon_pixmap())) self.setMinimumSize(500, 400) def init_ui(self): # 主窗口布局 central_widget = QWidget() self.setCentralWidget(central_widget) main_layout = QVBoxLayout(central_widget) main_layout.setContentsMargins(15, 15, 15, 15) main_layout.setSpacing(15) # 创建分页 self.tabs = QTabWidget() main_layout.addWidget(self.tabs) # 创建录音分页 self.create_recording_tab() # 创建设置分页 self.create_settings_tab() # 添加快捷键 self.setup_shortcuts() def create_recording_tab(self): \"\"\"创建录音分页\"\"\" recording_tab = QWidget() layout = QVBoxLayout(recording_tab) layout.setContentsMargins(10, 10, 10, 10) layout.setSpacing(15)