ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Audacity 仓库导读:Audacity 4 重构背景、构建系统与代码布局详解

Audacity 仓库导读:Audacity 4 重构背景、构建系统与代码布局详解 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 如下原样继承供直接照单安装GitCMake一个包管理器已测试Windows 上用 ChocomacOS 上用 Homebrew一个 CMake 生成器已测试Ninja一个 C 编译器已测试Windows 上用 MSVCLinux 上用 gQt 6.10组件选择macOS 选 DesktopWindows 选 MSVC 2022 64-bit 或 MSVC 2022 ARM64Windows on ARM并且需要勾选以下 Additional LibrariesQt 5 Compatibility ModuleQt Network AuthorizationQt Shader ToolsQt State MachinesBUILDING.md 还特别提醒Qt Online Installer 默认只提供最新版 Qt需要旧版本时在搜索栏右侧选择 Show Archive。从源码结构看CMakeLists.txt 要求cmake_minimum_required(VERSION 3.24)并强制CMAKE_CXX_STANDARD 20即 C20 是硬性标准同时根 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 四种编译方式方式一QtCreatorQML 交互首选。打开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/presetNamePreset 名说明关键 cache 变量base隐藏基类所有 preset 继承的基础配置生成器固定为 NinjaCMAKE_EXPORT_COMPILE_COMMANDSON、CMAKE_INSTALL_PREFIXsrc/appaudacity-debugDebug 构建带调试符号、无优化CMAKE_BUILD_TYPEDebug、CMAKE_CXX_FLAGS-DQT_QML_DEBUGaudacity-asan继承 debug 并启用 AddressSanitizerMUSE_COMPILE_ASANONaudacity-releaseRelWithDebInfo带优化与调试信息CMAKE_BUILD_TYPERelWithDebInfo使用示例在仓库根目录cmake --preset audacity-debug配置后执行cmake --build --preset audacity-debug。方式三Visual Studio仅 Windows。双击仓库根目录的 generate_sln.bat 脚本它先创建build目录再用vswhere.exe探测本机最高版本的 Visual Studio16→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打开工作区CtrlShiftP 选择 Open Workspace from File选中仓库根目录下的.vscode/audacity.code-workspace或先打开文件夹再打开工作区文件并点击 Open Workspace安装推荐扩展打开仓库时会提示错过后可用 CtrlShiftP 输入Extensions: Show Recommended Extensions补装只需一次执行 CtrlShiftP 选择 CMake: Configure 完成配置与构建 install 目标直接按 F5构建并运行第一次会构建并安装全部内容之后增量构建会非常快尤其在 Ninja 下。3.4 CMake 构建选项如何定制一次构建根 CMakeLists.txt 暴露了若干决定构建形态的选项对想深入参与的开发者很重要变量默认值说明AU4_BUILD_CONFIGURATIONapp构建形态app桌面应用/app-portableWindows 便携版/utestCI 单测AU4_BUILD_MODEdev构建模式dev开发/夜间构建/testingalpha、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仅 LinuxLV2 效果模块按平台开启AU_MODULE_EFFECTS_AUDIO_UNITON仅 macOSAudio Unit 效果模块按平台开启AU_USE_SBSMSON编译 SBSMS 时间伸缩库AU_USE_SOUNDTOUCHON编译 SoundTouch 音调/节奏库AU_USE_LIBCURLOFF是否用 libcurl 做 HTTP 请求AU_LOAD_TIMETRACKOFF是否从 Audacity 3 工程加载 Time trackAU_USE_PORTMIXERON用 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-trackau3/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-runtimeNyquist 插件运行时的整套 LISP 脚本、nyquist-plug-ins随包 Nyquist 插件、locale各语言 Qt 翻译.ts文件、workspacesClassic/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.0MUSE_APP_IS_PRERELEASE ONBUILDING.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),仅供参考
返回列表