Audacity 仓库导读:Audacity 4 重构背景、构建系统与代码布局详解
【免费下载链接】audacityAudio Editor项目地址: https://gitcode.com/GitHub_Trending/au/audacity
本文以 Audacity 仓库的 README 为核心,结合 BUILDING.md、CMakeLists.txt、version.cmake 与 CONTRIBUTING.md 等仓库文件,完整梳理当前仓库所处的 "Audacity 4 大重构" 阶段:为什么master分支对新手贡献者不友好、3.x 与 4.x 两条代码线的并存方式、Audacity 4 的构建工具链与 CMake 选项,以及仓库目录结构与参与贡献的路径。读完后,你将能够准确判断该在哪个分支提交补丁、按 README 指出的构建文档把 Audacity 4 在本地编译运行起来,并理解src/与au3/两套代码体系的分工。
一、README 给出的核心事实:仓库正处于重大结构变更中
README.md 用简短的篇幅传递了几个关键信息,它们是理解当前仓库一切状态的前提:
- 项目定位:Audacity 是一款易用的多轨音频编辑器与录音器,支持 Windows、macOS、GNU/Linux 等操作系统。README 中的 Coverage 徽章指向 CI 工作流
au4_check_unit_tests,即单元测试针对的是Audacity 4代码线。 - 重构声明:README 明确指出 "This repository is currently undergoing major structural change",当前正在开发 Audacity 4,意味着全新的 UI 以及大量重构。由此
master分支 "对新的贡献者不太友好"(not particularly friendly to new contributors)。 - 分支策略:仍然欢迎向 Audacity 3.x 提交补丁,但必须从
audacity3分支切出。README 同时给出了 3.x 与 4.x 各自的构建文档入口(对应本仓库 BUILDING.md 为 4.x 版本;3.x 的构建说明在release-3.7.0分支的同名文件)。 - 社区渠道:官方通过 YouTube、Discord 和博客同步开发进展。
从仓库实际内容看,README 的表述与代码状态完全一致:
- version.cmake 中版本被设定为
MUSE_APP_VERSION_MAJOR "4"、MINOR "0"、PATCH "0",并显式标记MUSE_APP_UNSTABLE ON与MUSE_APP_IS_PRERELEASE ON——这是一个 4.0.0 的预发布开发版; - 应用 GUI 标识为
org.audacityteam.audacity4,进一步印证当前主干即 Audacity 4 开发线; - 根目录同时存在
src/(4.x 新架构)与 au3/(3.x 经典代码基),两者并存正是 "结构变更中" 的直接体现。
二、许可证:GPLv3 为顶、GPLv2 为主、例外条款
README 的 License 小节说明了许可证结构,LICENSE.txt 开头段落可交叉印证:
- 整体软件以GPLv3发布;
- 大多数源码文件为GPLv2-or-later,这是未另行声明时的默认许可;
- 明确例外:第三方库目录
/au3/lib-src(含第三方库)以及 VST3 相关代码不在此默认之下; - 文档采用CC-BY 3.0许可(另有说明除外)。
需要注意:当前主干为 Audacity 4 开发线,au3/下的 3.x 资源目录在重构中会被逐步调整(例如仓库顶层已新增 thirdparty/ 收录vst3、soxr、soundtouch、sbsms等依赖的声明),引用许可证例外时请以 LICENSE.txt 与具体文件内声明为准。
三、Audacity 4 构建环境:基于 Muse Framework 的全新工具链
4.x 的 BUILDING.md 开头注明 "这些说明仍在完善中,将在 Audacity 4 发布前定稿"。这与 README 的重构声明一脉相承。由于 Audacity 4 的大部分代码基于 MuseScore Studio 的框架(仓库通过子模块muse引入 Muse Framework,见 .gitmodules),其构建环境与旧版 wxWidgets 体系完全不同。
3.1 硬性依赖清单
BUILDING.md 列出的 Requirements & Dependencies 如下(原样继承,供直接照单安装):
- Git
- CMake
- 一个包管理器(已测试:Windows 上用 Choco,macOS 上用 Homebrew)
- 一个 CMake 生成器(已测试:Ninja)
- 一个 C++ 编译器(已测试:Windows 上用 MSVC,Linux 上用 g++)
- Qt 6.10,组件选择:macOS 选 "Desktop",Windows 选 "MSVC 2022 64-bit" 或 "MSVC 2022 ARM64"(Windows on ARM),并且需要勾选以下 "Additional Libraries":
- Qt 5 Compatibility Module
- Qt Network Authorization
- Qt Shader Tools
- Qt State Machines
BUILDING.md 还特别提醒:Qt Online Installer 默认只提供最新版 Qt,需要旧版本时在搜索栏右侧选择 "Show > Archive"。
从源码结构看,CMakeLists.txt 要求cmake_minimum_required(VERSION 3.24)并强制CMAKE_CXX_STANDARD 20,即 C++20 是硬性标准;同时根 CMakeLists 通过MUSE_FRAMEWORK_PATH ${CMAKE_SOURCE_DIR}/muse指向 Muse Framework 子模块,muse与muse_deps两个子模块(分别指向 MuseScore 的 muse_framework 与 muse_deps 仓库)是构建的前置条件,因此必须带子模块克隆:
git clone --recurse-submodules https://gitcode.com/GitHub_Trending/au/audacity.git3.2 获取依赖与 PATH 设置
- 若尚未安装上述依赖,按 BUILDING.md 的说法 "现在是安装它们的时候了";
- Ninja 应当能处理其余依赖,若不行,可从
buildscripts/ci/{你的操作系统}/目录下的 setup 文件推断完整依赖列表(该目录下按 Linux/macOS/Windows 分平台组织了 CI 配置); - BUILDING.md 明确提示:由于尚未清理完毕的 MuseScore 依赖,目前依赖列表相当长;
- Git、CMake、Ninja、包管理器、编译器与 Qt 都应加入 PATH,否则需要在 CMakeCache 中手动指定。
3.3 四种编译方式
方式一:QtCreator(QML 交互首选)。打开CMakeLists.txt,用自动检测到的 Qt kit 配置工程,直接 Build。BUILDING.md 指出:用 QtCreator 编辑和编译,在对 QML 交互时能获得最好的智能提示(intellisense)与调试支持;但 Windows 上调试较慢,如果主要写 C++ 代码,可考虑下面的命令行方式。
方式二:命令行(标准 CMake 流程)。BUILDING.md 原文给出的三行命令可直接复制:
# inside the Audacity source: cmake -S . -B build/ [options] # configure (first build only) cmake --build build/ # build (every build) cmake --install build/ # install (every successful build)仓库同时提供 CMakePresets.json,可跳过手动拼参数。预置了四个 preset,二进制目录统一为${sourceDir}/build/<presetName>:
| Preset 名 | 说明 | 关键 cache 变量 |
|---|---|---|
base(隐藏基类) | 所有 preset 继承的基础配置,生成器固定为 Ninja | CMAKE_EXPORT_COMPILE_COMMANDS=ON、CMAKE_INSTALL_PREFIX=src/app |
audacity-debug | Debug 构建,带调试符号、无优化 | CMAKE_BUILD_TYPE=Debug、CMAKE_CXX_FLAGS=-DQT_QML_DEBUG |
audacity-asan | 继承 debug 并启用 AddressSanitizer | MUSE_COMPILE_ASAN=ON |
audacity-release | RelWithDebInfo,带优化与调试信息 | CMAKE_BUILD_TYPE=RelWithDebInfo |
使用示例(在仓库根目录):cmake --preset audacity-debug配置后执行cmake --build --preset audacity-debug。
方式三:Visual Studio(仅 Windows)。双击仓库根目录的 generate_sln.bat 脚本:它先创建build目录,再用vswhere.exe探测本机最高版本的 Visual Studio(16→VS2019、17→VS2022,其他版本报错退出),在build目录生成 Visual Studio 解决方案并构建install目标;之后打开./build/audacity.sln,按 F5 即可运行 Audacity。
方式四:VSCode(目前文档注明仅验证过 Windows,标记 TODO 泛化到其他系统)。要点:
- 默认生成器是 Ninja,要么安装好 Ninja,要么修改
.vscode/settings.json中的cmake.generator值(例如Visual Studio 16 2019); - 打开工作区:Ctrl+Shift+P 选择 "Open Workspace from File",选中仓库根目录下的
.vscode/audacity.code-workspace;或先打开文件夹,再打开工作区文件并点击 "Open Workspace"; - 安装推荐扩展:打开仓库时会提示;错过后可用 Ctrl+Shift+P 输入
Extensions: Show Recommended Extensions补装,只需一次; - 执行 Ctrl+Shift+P 选择 "CMake: Configure" 完成配置与构建 install 目标;
- 直接按 F5构建并运行:第一次会构建并安装全部内容,之后增量构建会非常快(尤其在 Ninja 下)。
3.4 CMake 构建选项:如何定制一次构建
根 CMakeLists.txt 暴露了若干决定构建形态的选项,对想深入参与的开发者很重要:
| 变量 | 默认值 | 说明 |
|---|---|---|
AU4_BUILD_CONFIGURATION | app | 构建形态:app(桌面应用)/app-portable(Windows 便携版)/utest(CI 单测) |
AU4_BUILD_MODE | dev | 构建模式:dev(开发/夜间构建)/testing(alpha、beta、RC)/release(稳定发布) |
AU4_REVISION | 空 | 构建修订号 |
AU_BUILD_*_MODULE/AU_BUILD_*_TESTS | 模块 ON,测试跟随MUSE_ENABLE_UNIT_TESTS | 逐个开关 appshell、effects、playback、record、projectscene、trackedit 等模块及其单元测试 |
AU_MODULE_EFFECTS_VST/AU_MODULE_EFFECTS_NYQUIST | ON | VST 与 Nyquist 效果插件模块(默认都开) |
AU_MODULE_EFFECTS_LV2 | ON(仅 Linux) | LV2 效果模块按平台开启 |
AU_MODULE_EFFECTS_AUDIO_UNIT | ON(仅 macOS) | Audio Unit 效果模块按平台开启 |
AU_USE_SBSMS | ON | 编译 SBSMS 时间伸缩库 |
AU_USE_SOUNDTOUCH | ON | 编译 SoundTouch 音调/节奏库 |
AU_USE_LIBCURL | OFF | 是否用 libcurl 做 HTTP 请求 |
AU_LOAD_TIMETRACK | OFF | 是否从 Audacity 3 工程加载 Time track |
AU_USE_PORTMIXER | ON | 用 PortMixer 管理音频设备 |
CI 侧则由 ci_build.cmake 承接:它把BUILD_TYPE、BUILD_MODE、BUILD_CONFIGURATION、INSTALL_DIR、BUILD_ENABLE_UNIT_TESTS、BUILD_ENABLE_CODE_COVERAGE、CRASH_REPORT_URL等收敛为一组 cache 变量,供 GitHub Actions 工作流调用——这也解释了 README 中 Coverage 徽章为何对应 "au4_check_unit_tests" 工作流。
四、仓库代码布局:3.x 与 4.x 双代码线如何并存
从源码结构看,README 所说的 "重大结构变更" 在目录层面一目了然:
- src/ ——Audacity 4 新架构主体,按 Qt Quick/QML 模块化组织:
app(主程序与命令行解析)、appshell(含大量 QML 界面)、project与projectscene(工程与工程场景)、playback、record、effects(内置builtin_collection,以及vst、nyquist、lv2、audio_unit等插件宿主)、importexport(导入/导出/标签)、spectrogram(频谱图)、trackedit、preferences等。src/effects/下各插件子目录与上文 CMake 的AU_MODULE_EFFECTS_*开关一一对应。 - au3/ ——Audacity 3.x 经典代码基:
au3/src是 wxWidgets 时代的传统源码(effects/、tracks/、menus/等),au3/libraries/下是 50 余个以au3-前缀命名的独立库(如au3-math、au3-fft、au3-wave-track),au3/modules/import-export承载大量音频格式导入导出实现。 - buildscripts/ —— 构建基础设施:
cmake/下的SetupBuildEnvironment.cmake、SetupDependencies.cmake、DependencyManifest.cmake等,以及按ci/linux、ci/macos、ci/windows分平台的 CI 配置;INSTALL 与 BUILDING.md 的入口说明都指向这套体系。 - thirdparty/ —— 第三方依赖声明(
vst3、soxr、soundtouch、sbsms、sqlite、twolame、portmixer等),配合muse_deps子模块管理。 - share/ —— 运行时资源:
nyquist-runtime(Nyquist 插件运行时的整套 LISP 脚本)、nyquist-plug-ins(随包 Nyquist 插件)、locale(各语言 Qt 翻译.ts文件)、workspaces(Classic/Modern/Music 三套默认工作区布局)等。 - docs/ —— 少量专题技术文档,如 effect-view-architecture.md(效果视图架构的类图说明)。
这种布局意味着:阅读 3.x 行为去查au3/,阅读 4.x 新架构去查src/;两者共享share/的运行时资源与翻译。
五、如何参与:分支选择与贡献通道
结合 README 与 CONTRIBUTING.md,贡献路径如下:
- 提交代码:Audacity 以 C++ 为主,需至少熟悉 C++。3.x 补丁从
audacity3分支切出;4.x 补丁面向master(但如 README 所言,重构进行中,新手请先熟悉现状)。贡献代码前需要签署 CLA;开发疑问可在 Audacity 开发者 Discord 提问。 - 插件开发:Audacity 支持多种插件 API——Nyquist、LV2、Audio Units(仅 macOS)与 VST2 效果插件。这些插件通常不随 Audacity 发行,但对用户极有帮助。
- 测试与找 bug:可在 GitHub Actions 的 "Actions" 页下载绑定特定 pull request 的开发构建。经验法则:若对应 PR 尚未合并,把发现的、可能由该 PR 引起的问题直接评论到 PR 上;若已合并,则到 issue tracker 新建 bug。bug 报告要求可复现,并鼓励寻找最一般的复现形式(例如:放大(Amplify)复现的问题,试试换个效果(如 Normalize)、换到片段开头是否仍复现);找不到复现步骤时,建议先去论坛确认自己是否操作有误。
- 翻译:见官方翻译者页面(README 提到的社区渠道之一);仓库内 share/locale/ 存放各语言的 Qt 翻译文件,au3/locale/ 则存放 3.x 的
.po文件。 - 用户支持:最活跃的用户社区在论坛;制作视频教程时请注明所用 Audacity 版本,方便后来的读者对照。
六、小结:适用前提与阅读顺序
- 适用前提:本文所有构建步骤均针对当前
master分支的Audacity 4 预发布(4.0.0,MUSE_APP_IS_PRERELEASE ON);BUILDING.md 自述 "work-in-progress,发布前定稿",命令与依赖清单可能随版本演进变化。3.x 的稳定构建流程请参考audacity3分支及其对应构建文档。 - 建议阅读顺序:先用 README.md 确认仓库状态与分支策略 → 按 BUILDING.md 装好 Qt 6.10 + CMake + Ninja 工具链 → 带子模块克隆后用 CMakePresets.json 的 preset 或标准 CMake 命令完成首次构建 → 按本文第四节的布局图,按需进入
src/(4.x)或au3/(3.x)细读实现。
掌握以上内容后,你既能准确向仓库维护者描述 "我在哪个分支、用哪个 preset、开了哪些 CMake 选项构建出的 4.x 版本",也能在 3.x 与 4.x 两套代码之间快速定位功能实现,避免在重构期的仓库中走弯路。
【免费下载链接】audacityAudio Editor项目地址: https://gitcode.com/GitHub_Trending/au/audacity
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考