Audacity 仓库导读:Audacity 4 重构背景、构建系统与代码布局详解
2026/9/13 12:21:23 网站建设 项目流程

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 用简短的篇幅传递了几个关键信息,它们是理解当前仓库一切状态的前提:

  1. 项目定位:Audacity 是一款易用的多轨音频编辑器与录音器,支持 Windows、macOS、GNU/Linux 等操作系统。README 中的 Coverage 徽章指向 CI 工作流au4_check_unit_tests,即单元测试针对的是Audacity 4代码线。
  2. 重构声明:README 明确指出 "This repository is currently undergoing major structural change",当前正在开发 Audacity 4,意味着全新的 UI 以及大量重构。由此master分支 "对新的贡献者不太友好"(not particularly friendly to new contributors)。
  3. 分支策略:仍然欢迎向 Audacity 3.x 提交补丁,但必须从audacity3分支切出。README 同时给出了 3.x 与 4.x 各自的构建文档入口(对应本仓库 BUILDING.md 为 4.x 版本;3.x 的构建说明在release-3.7.0分支的同名文件)。
  4. 社区渠道:官方通过 YouTube、Discord 和博客同步开发进展。

从仓库实际内容看,README 的表述与代码状态完全一致:

  • version.cmake 中版本被设定为MUSE_APP_VERSION_MAJOR "4"MINOR "0"PATCH "0",并显式标记MUSE_APP_UNSTABLE ONMUSE_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/ 收录vst3soxrsoundtouchsbsms等依赖的声明),引用许可证例外时请以 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 子模块,musemuse_deps两个子模块(分别指向 MuseScore 的 muse_framework 与 muse_deps 仓库)是构建的前置条件,因此必须带子模块克隆

git clone --recurse-submodules https://gitcode.com/GitHub_Trending/au/audacity.git

3.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 继承的基础配置,生成器固定为 NinjaCMAKE_EXPORT_COMPILE_COMMANDS=ONCMAKE_INSTALL_PREFIX=src/app
audacity-debugDebug 构建,带调试符号、无优化CMAKE_BUILD_TYPE=DebugCMAKE_CXX_FLAGS=-DQT_QML_DEBUG
audacity-asan继承 debug 并启用 AddressSanitizerMUSE_COMPILE_ASAN=ON
audacity-releaseRelWithDebInfo,带优化与调试信息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_CONFIGURATIONapp构建形态:app(桌面应用)/app-portable(Windows 便携版)/utest(CI 单测)
AU4_BUILD_MODEdev构建模式: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_NYQUISTONVST 与 Nyquist 效果插件模块(默认都开)
AU_MODULE_EFFECTS_LV2ON(仅 Linux)LV2 效果模块按平台开启
AU_MODULE_EFFECTS_AUDIO_UNITON(仅 macOS)Audio Unit 效果模块按平台开启
AU_USE_SBSMSON编译 SBSMS 时间伸缩库
AU_USE_SOUNDTOUCHON编译 SoundTouch 音调/节奏库
AU_USE_LIBCURLOFF是否用 libcurl 做 HTTP 请求
AU_LOAD_TIMETRACKOFF是否从 Audacity 3 工程加载 Time track
AU_USE_PORTMIXERON用 PortMixer 管理音频设备

CI 侧则由 ci_build.cmake 承接:它把BUILD_TYPEBUILD_MODEBUILD_CONFIGURATIONINSTALL_DIRBUILD_ENABLE_UNIT_TESTSBUILD_ENABLE_CODE_COVERAGECRASH_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 界面)、projectprojectscene(工程与工程场景)、playbackrecordeffects(内置builtin_collection,以及vstnyquistlv2audio_unit等插件宿主)、importexport(导入/导出/标签)、spectrogram(频谱图)、trackeditpreferences等。src/effects/下各插件子目录与上文 CMake 的AU_MODULE_EFFECTS_*开关一一对应。
  • au3/ ——Audacity 3.x 经典代码基au3/src是 wxWidgets 时代的传统源码(effects/tracks/menus/等),au3/libraries/下是 50 余个以au3-前缀命名的独立库(如au3-mathau3-fftau3-wave-track),au3/modules/import-export承载大量音频格式导入导出实现。
  • buildscripts/ —— 构建基础设施:cmake/下的SetupBuildEnvironment.cmakeSetupDependencies.cmakeDependencyManifest.cmake等,以及按ci/linuxci/macosci/windows分平台的 CI 配置;INSTALL 与 BUILDING.md 的入口说明都指向这套体系。
  • thirdparty/ —— 第三方依赖声明(vst3soxrsoundtouchsbsmssqlitetwolameportmixer等),配合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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询