Skip to content

Repository files navigation

音频作坊 · audio-workshop

本地优先的音频工作台:自己的声音、自己的机器、自己的素材——不按字收费。

三主线统一设计(配音 / BGM / 音乐制作),另有「人声分离」「音色设计」两个 Tab,配音先行。立项依据、实测基线、风险与路线图见 CHARTER.md。

当前阶段:M2 已稳定;M4 歌曲彩蛋开发中。配音 + BGM 主链路已可用;歌曲场景已接入 yue2/ACE-Step 文生歌与 sheetsage2→yue2 翻唱(音乐制作 Tab 提供「文生歌 / 翻唱」模式切换, 翻唱固定 yue2 并选源音频),作为质量未达主线产品级的彩蛋能力。

本仓库(开源层)

路径 作用
src/ + ui/ 桌面壳(Rust + Slint 1.17 + slint-pixel):配音 + BGM 真实链路
crates/aw-core/ 核心库:切句 / 文本兜底 / 服务客户端 / 逐句合成 / 拼装 / BGM 生成与混音(与 Python 行为由 90 例 parity 夹具固定)
config/models.schema.yaml 模型参数化配置:每个模型的旋钮、已知缺陷登记、文本兜底规则
config/model-capabilities.json 随包能力清单(生成物):role/requires/known_issues/product_excluded/mode,App 的兜底来源
tools/audio_config.py 配置层(CLI 形态):渲染服务配置 / 文本兜底 / 按场景端到端执行
tools/gen_model_capabilities.py 从 schema 生成上面那份能力清单(--check 校验,纯离线)
tools/audio_dub.py 配音链路 CLI(M0):切句 / 逐句合成 / 拼装 / 单句重录,工程可断点续作
tools/audio_eval.py 评估台:可懂度(ASR 回测 + 字符级对齐)、耗时、峰值内存、回归对比
tools/model_fetch.py 基础模型下载器(M1 免费):包装上游 model_manager 拉权重 + 打印手动路径片段

设计原则:技术会进步、模型会换 —— 价值在配置层,不在改模型。模型不稳的地方(数字读法、不可用变体)由配置声明与兜底,不写死在代码里。

模型的能力/硬要求(哪个引擎必须给参考音频、哪个变体不可用)由 config/models.schema.yaml 声明,经两条路投递到 App:server.json(显式、优先级高)与上面那份随包能力清单(兜底)。所以不需要先跑 audio_config.py render --write 才有提示;详见 docs/model-capabilities.md。

引擎是 audio.cpp(Apache 2.0)。随包取的是上游官方产物:此前维护的 gqf2008 fork 已退役——它的 Metal bf16 补丁 PR #554 已于 2026-09-19 并入官方,官方 v0.8.2 自带这份能力,所以不再需要定制引擎。随包版本以 engine-lock.json 为准(当前上游 v0.8.2):发布包按它校验 sha256 后取预编译 audiocpp_server,用户下载即用;源码 checkout 的 submodule 化待落(在那之前"锁版本"不靠 checkout 上的 tag,靠这个锁文件);适配只写在本仓库的薄层。

快速开始

桌面壳(主入口)

前置:audiocpp_server 在跑(默认 http://127.0.0.1:8080,可用 AW_SERVER 覆盖), 音色清单优先从 AW_SERVER_CONFIG 读取;否则按平台查找 (macOS 保留 ~/.local/opt/audio.cpp/server.json,Linux 用 ~/.config/audio.cpp/server.json, Windows 用 %APPDATA%\\audio.cpp\\server.json)。

平台要求(系统对话框):应用里的「选文件 / 选目录」用各平台自带的程序拉起—— macOS osascript、Windows PowerShell、Linux zenity(不随本应用分发,要自己装): Debian/Ubuntu sudo apt install zenity、Fedora sudo dnf install zenity、 Arch sudo pacman -S zenity。缺了它不会静默失败:状态行会如实说「系统对话框不可用」 并给出这条安装命令;macOS 上被「系统设置 → 隐私与安全性 → 自动化」拒绝时同样会给授权指引 (用户取消与选择器起不来是两回事,判定与文案都在 src/picker.rs 一处)。

cargo run --release        # 打开配音工作台

流程:粘稿(或示例稿)→ 点「开始合成」→ 逐句状态流转 → 点句子试听 / ↑↓ 翻句 / 空格 播放停止 → 配音页「高级」里导出 WAV / SRT(右上角抽屉是全局设置:外观 / 工程 / 服务 / 模型) → 切到 BGM 场景写描述,生成并混音 → 导出三轨。

  • 断点续作:工程逐句落盘(~/Documents/音频作坊/projects/<工程名>/), 重开 / 重跑自动跳过已合成句。
  • 单句重录:行内「重录」换 seed 只重跑该句;时间轴点击 = 从那句开始听。
  • 音色克隆:配音页旁白块内「换音色 → 参考音频」点「选择…」从文件框选参考 wav (也可以手填路径),再填参考音频的文本——是否必填按引擎:audio8-tts 等要求两者成对、 缺文本会 500;index-tts2 不要文本,可不填。 文本可以点「自动转写」让 ASR 听一遍填好,但要自己核对。 也可以走「音色设计」Tab。详见 docs/voice-clone.md。
  • BGM 三轨:BGM 场景按当前配音工程时长生成 30s 分段,按句子时间轴自动 duck, 导出 <工程>_voice.wav、<工程>_bgm.wav、<工程>_mixed.wav 和 SRT。
  • 跨平台配置:工程/导出目录使用系统 Documents;模型根可用 AW_MODELS_ROOT 覆盖; 推理后端 auto 探测(macOS→metal / nvidia-smi→cuda / 其它→cpu),也可用 AW_BACKEND 强制。
  • 校听倍速即时生效(回放层,不动合成产物);合成语速是模型参数,属配置层。

命令行(M0 链路,仍然可用)

./tools/audio_config.py check                    # 校验配置与模型落点
./tools/audio_config.py text "报价 1234.56 元" --model audio8-tts
./tools/audio_eval.py                            # 质量评估 + 回归对比
./tools/audio_dub.py new --out 工程目录 ...      # 配音工程(见 --help)
# M2 BGM:对已有配音工程跑完整生成/对齐/duck/mix(真服务)
cargo run -p aw-core --example bgm_run -- ~/Documents/音频作坊/projects/工程名 \
  "温暖克制的科技感口播背景音乐,钢琴与轻电子,无人声,循环友好"
# M4 歌曲:文生歌(yue2 / ACE-Step;ACE-Step 本机内存不够)
#   翻唱(sheetsage2 → yue2 cot=melody)桌面入口在「音乐制作」Tab:切到「翻唱」模式,
#   选源音频后走 transcribe_abc → generate_cover(固定 yue2)。命令行示例仍可用:
#   真机整首已跑通(2026-09-17):本机 audiocpp_server(metal) + 30.08s 源音频 → 产物 51.76s,
#   RMS=3000.6 非静音,墙钟 3m36s。跑的是 aw-core 的 examples/song_cover(与 Cmd::RunCover
#   同一对调用),不是 GUI 点击路径 —— GUI 接线靠单测 + 只读冒烟,像素级布局仍未目视。
# ACE-Step 的门槛是**可用内存** 9.77 GiB(引擎估算 8.77 GiB + 1 GiB 余量);
# 本机 16GB 实测(2026-09-17 三次采样,可用值是变量不是硬件常量):
#   7.32 GiB(TTS+ASR 常驻)/ 8.24 GiB(全部卸载后)/ 6.60 GiB(复核时)
#   → 都低于门槛,预检直接拒绝;需要更大内存的机器或 CUDA 主机(不是配置问题)
cargo run -p aw-core --example song_run -- yue2 歌词.txt "Mandarin Chinese R&B slow jam" out-dir
cargo run -p aw-core --example song_cover -- source.wav 歌词.txt "R&B slow jam" out-dir

模型下载(基础下载器,免费)

python3 tools/model_fetch.py --list              # 产品登记的模型 + 本机落点状态
python3 tools/model_fetch.py audio8-tts          # 从上游源拉权重(幂等,可续传)

下载器不另造逻辑:包装上游 tools/model_manager_v2.py(model_specs/ 是下载链接 的 source of truth),下载后校验落点并打印 server.json 手动路径配置片段。 上游 checkout 位置:环境变量 AUDIOCPP_DIR,默认本仓库同级的 ../audio.cpp。

打包与发版(macOS)

./release.sh     # 打包 → 签名 → 公证(.app 与 DMG)→ 装订,产物在 dist/
./package.sh     # 只要 .app(自己用,不提交公证)

签名身份与公证凭据都是机器级秘密,不在仓库里(见 docs/release.md)。 两个实测踩过的坑写在同一篇里:打包后必须的 disable-library-validation、以及 DMG 要 单独公证且在 .app 装订之后重建 —— 这两条不做的话,产物要么一启动就 dyld 报错、 要么 Gatekeeper 直接拒。

发行包现状:人声分离的 ONNX Runtime 已静态链接进包,目标机不需要安装 (package.sh 强制 LIBONNXRUNTIME_NO_PKG_CONFIG=1 + otool 硬门禁,CI 的 macOS job 同样断言; 见 docs/release.md 的静态链接条款)。v0.1.4 的 Release 已发三平台产物:macOS .dmg、linux-x64.tar.gz、windows-x64.zip + windows-x64-setup.exe(见 docs/release.md)。

检查更新(发现新版本 + 打开发布页)这条链路已通并验过:v0.1.0 已发布,releases/latest 实测 200 (见 docs/update.md 的真链路用例);自动下载/静默安装不在 v1 (见 docs/update.md)。发版步骤见 docs/release.md。

本地验证

cargo fmt --check && cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace            # 含 mock 服务的策略测试与 parity 夹具
cargo build --release             # 发版必须过:debug 门禁发现不了 release-only 的 cfg 断口
cargo test -p aw-core -- --ignored  # 需要本机服务在线的真实 e2e

发布版无演示后门:先 cargo build --release,再 strings target/release/audio-workshop | grep -c AW_UI_STATE → 0。 (AW_UI_STATE 的演示态全是 #[cfg(debug_assertions)] 门控的;反过来 debug 版里这条 grep 应该 > 0 —— 否则说明这条检查没有鉴别力。)

许可 / License

本仓库(自研层)全仓统一 Apache-2.0,SPDX 标识 Apache-2.0,与上游 audio.cpp 一致(定稿依据见 CHARTER.md §11)。 许可证全文见仓库根 LICENSE;根 crate 与每个 workspace member(当前 crates/aw-core) 的 Cargo.toml license 字段、本小节、CHARTER §11 口径一致。发版脚本 (release.sh / package.sh → packaging/check_license.sh) 断言「LICENSE 存在且与 Cargo.toml 元数据一致」,缺失或不一致即失败。

适用范围:仓库内自研内容——src/、ui/、crates/、tools/、config/、packaging/、 tests/、文档与脚本。以下两类第三方内容不在本许可的授权范围内:

  • 随包推理引擎 audiocpp_server:来自上游 audio.cpp(Apache-2.0),按 engine-lock.json 取件的预编译产物,其许可以上游为准;
  • 模型权重:不随发行版分发,属另一件事,见下面「许可红线」。

许可红线

只做模型下载器,不打包权重。 部分模型(如非商用许可)不能随发行版分发——这是产品形态的硬约束,见 CHARTER 第 5 节。

About

本地优先的音频工作台:模型参数化配置层 + 配音链路 + 质量评估台(walgit 主仓,此仓库为发版镜像)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages