Skip to content

About

实时变声盒子 v1.0.0 —— 相位声码器实时变声工具(Python + PyQt)

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

VariableSound 变声盒子 🎤

Windows 桌面端实时变声器:游戏开黑、微信语音一键换声整蛊,纯本地、零延迟感、不上云。

Python GUI License


✨ 功能特性

  • 11 种预设音色:男童、女童、男青年、女青年、大叔、阿姨、萝莉、东北女汉子、四川妹子、老爷爷、老奶奶
  • 实时变声:传统 DSP 算法(基频 + 共振峰解耦),延迟 ≈35ms(< 50ms),CPU 占用低、无需显卡
  • 自定义调音:11 个参数滑块实时调节(音高、共振峰、气声、混响、颤音、粗糙度、EQ 等)
  • 音频导入克隆音色:导入一段语音(wav/mp3/flac),自动分析 F0/共振峰/谱质心/音色特征,生成对应调音参数
  • 虚拟声卡路由:变声结果输出到 VB-CABLE 虚拟麦克风,游戏/微信里选它即可整蛊
  • 自适应源音高:启动时自动估算你的声线(男/女源),让每个预设男女通用、听感一致
  • 预设管理:内置预设只读,改动后可"另存为我的音色",本地持久化

📋 系统要求

项 要求
操作系统 Windows 10 / 11(x64)
声卡 自带麦克风即可;整蛊他人需额外安装 VB-CABLE 虚拟声卡
运行环境 已打包:无需 Python;源码运行:Python 3.11+(实测 3.13)

🚀 快速开始

方式一:直接运行打包好的程序(推荐给普通用户)

双击 dist\VariableSound\VariableSound.exe 即可(单目录模式,启动快、无需解压)。

首次启动会弹出免责声明勾选;若未装 VB-CABLE 会引导你到官网下载。

方式二:从源码运行(开发者)

# 1. 创建虚拟环境
python -m venv .venv

# 2. 安装依赖
.venv\Scripts\pip install -r requirements.txt

# 3. 运行
.venv\Scripts\python main.py

🎮 使用步骤

  1. 插入麦克风,启动程序
  2. 在「设备区」选择 输入设备(你的真实麦克风)
  3. 输出设备选择 CABLE Input(VB-CABLE 虚拟声卡的输入端)
  4. 点 启动变声
  5. 在音色卡片里点选一种预设(如「萝莉」「大叔」),实时试听
  6. 在 微信 / 游戏 的麦克风设置里,把输入设备选为 CABLE Output(VB-CABLE 虚拟声卡的输出端)
  7. 开黑 / 语音,朋友听到的就是变声后的效果 😈

自定义音色

  • 手动调音:选一个预设后,拖动参数滑块实时微调,点「另存为我的音色」保存
  • 导入克隆:准备一段目标声音的音频(≤60s、纯人声最佳)→ 点「导入音频生成音色」→ 程序自动分析并生成调音参数 → 试听微调后保存

📦 打包成 exe

# 安装打包工具
.venv\Scripts\pip install pyinstaller

# 一键打包(等价于 python -m PyInstaller build.spec --noconfirm --clean)
build.bat

产物:dist\VariableSound\(单目录模式,内含 VariableSound.exe + 依赖 DLL,启动快、无需每次解压)。

如需单文件便携版(一个 exe 发给朋友),把 build.spec 末尾改回 EXE(...) 单文件写法即可(代价是每次启动需解压,冷启动慢几秒)。


🏗️ 项目结构

VariableSound/
├── main.py                       # 入口:QApplication + 免责声明 + 主窗口
├── requirements.txt              # 依赖清单(必需 + 可选降级)
├── build.spec / build.bat        # PyInstaller 打包配置(单目录模式)
├── app/
│   ├── config.py                 # 全局常量(采样率/块/窗长/路径,单一来源)
│   ├── audio/                    # 音频引擎、设备管理、环形缓冲
│   │   ├── engine.py             # 实时音频流回调(线程安全)
│   │   ├── devices.py            # 输入/输出设备枚举 + VB-CABLE 检测
│   │   └── ringbuffer.py         # 波形/VU 显示缓冲
│   ├── dsp/                      # 核心 DSP 算法层
│   │   ├── stft.py               # 短时傅里叶变换(相位声码器)
│   │   ├── pitch_shifter.py      # 变调(基频偏移)
│   │   ├── formant_shifter.py    # 共振峰偏移(倒谱包络 warp,与基频解耦)
│   │   ├── voice_chain.py        # 音效链(混响/气声/颤音/粗糙度/EQ)
│   │   ├── filters.py            # biquad/comb/allpass 滤波器
│   │   └── f0_tracker.py         # 基频估计(YIN)
│   ├── analysis/                 # 音频导入特征提取
│   │   ├── preprocess.py         # 预处理(重采样/VAD/降噪)
│   │   ├── feature_extractor.py  # F0/共振峰/谱质心/HNR 提取(三级降级)
│   │   └── param_mapper.py       # 特征 → 调音参数映射
│   ├── presets/                  # 预设数据层
│   │   ├── models.py             # VoiceParams 数据模型
│   │   ├── builtin.py            # 11 种内置音色参数
│   │   └── preset_manager.py     # 预设加载/保存
│   └── ui/                       # PySide6 界面层
│       ├── main_window.py        # 主窗口(四区布局 + 信号槽编排)
│       ├── preset_panel.py       # 音色卡片网格
│       ├── param_panel.py        # 调音滑块面板
│       ├── monitor_panel.py      # 波形/频谱/VU 实时显示
│       ├── device_panel.py       # 输入/输出设备选择
│       ├── import_dialog.py      # 音频导入对话框
│       ├── disclaimer.py         # 免责声明
│       ├── widgets.py            # 自定义控件
│       └── styles.py             # QSS 主题
├── tests/                        # 测试(smoke / QA 独立 / 回调性能基准)
└── docs/                         # PRD / 架构设计 / 类图 / 时序图(测试报告与诊断产物不入库)

⚙️ 技术方案

  • 变声算法:STFT 相位声码器(变调)+ 倒谱包络 warp(共振峰),单次 FFT 内完成,基频与共振峰天然解耦,避免"花栗鼠机器人音"
  • 音频参数:48kHz / 单声道 / FFT=1024 / hop=256,算法延迟 ≈21.3ms,端到端 ≈35ms
  • 线程安全:音频回调内零锁、零内存分配、零 Qt;参数经 Queue(maxsize=1) 传递,显示经预分配 RingBuffer + 30Hz QTimer
  • 降级兜底:特征提取三级降级 pyworld → librosa → scipy,缺包/无设备/损坏文件均优雅降级不崩溃
  • 11 预设:基频偏移(半音)+ 共振峰偏移(%)+ 目标 F0 中心 + 音效链参数,男女源自适应

✅ 质量验证

项 结果
QA 独立测试 22/22 通过,0 个 P0/P1 缺陷
变调精度 +7 半音 → 1498.2Hz(误差 0.01%)
共振峰-基频解耦 单独 warp 时 F0 不变、包络峰正确移动
回调实时性 最坏块耗时 1.34ms(预算 5.33ms)
导入 F0 精度 误差 0.31%
无削波/无爆音 11 预设全有限、块边界无跳变

详见 docs/test-report.md(本地文档,未随仓库分发)。


🆕 变声质量升级(本轮增量)

依据 docs/architecture-voicequality.md(v1.1)与 docs/prd-voicequality.md。 消除「金属声 / 谐波稀疏 / 空洞 / 鼻音」并新增两档质量模式。

两档质量模式(顶部 Toggle 常驻)

档位 帧长/步进 回调块 瞬态相位重置 多帧谐波平滑 适用
音质优先(默认) 2048 / 512(75%) 512 开 开 追求干净、少伪影
低延迟 2048 / 512(75%) 256 开 关 追求更低延迟
  • 两档均用 N=2048/H=512(男源谐波间噪声底达标前提),差异仅在回调块长与增强开关;
  • 端到端延迟换算见质量看板(档位 / 延迟 / 谐波间噪声底);
  • 档位写入 %APPDATA%\VariableSound\settings.json,下次启动自动恢复;切换失败自动回滚上一档,不会静音。

新增调音参数(「④ 音色塑形」折叠区)

参数 范围 默认 说明
频谱迁移量(原名「共振峰偏移」) −30%~+50% 0 整体移动共振峰位置,与音高解耦
谱倾斜 −6~+6 dB/oct 0 绕 1kHz 旋转,更亮 / 更暗
谐波丰富度 0~100 50(中性) 更丰满 / 更单薄
去咝声 0~100 0 衰减 5–10kHz 咝声(净高频提升硬夹 ≤ +2dB)
冲劲 (presence) −6~+6 dB 0 2–5kHz 抬升,近似「偏前」

质量提升要点

  • 谐波保真:幅度与瞬时频率插值由线性改三次(Catmull–Rom),谐波间噪声底显著下降;
  • 相位质量:新增瞬态相位重置(谱通量+能量双判据),消除宽带瞬态 pre-echo;
  • 频谱迁移:倒谱包络 warp 改三次 + 能量归一化,抑制空洞;
  • 音色塑形:新增 STFT 域塑形层(默认恒等,不生效,旧预设与旧 JSON 完全兼容);
  • 响度对齐:逐预设静态增益(无压缩感/无泵动),补偿下移变调的固有损失。

能力边界

  • 可调:音高 / 频谱迁移量 / 频谱倾斜 / 谐波丰富度 / 去咝声 / 冲劲;
  • 不可塑造:鼻音共振峰等复杂共振结构(presence 仅为 2–5kHz 近似抬升);
  • 旧版预设 JSON(缺新字段)加载后新参数取默认值(= 不生效),行为与升级前一致。

⚠️ 免责声明

本软件仅供娱乐与学习用途。请勿用于冒充他人、诈骗、违法或侵犯他人合法权益的活动。使用本软件产生的一切后果由使用者自行承担。


📄 许可证

本项目为个人娱乐项目,暂未选择开源许可证。

About

实时变声盒子 v1.0.0 —— 相位声码器实时变声工具(Python + PyQt)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages