文档目录

快速开始

三步就能跑起来喵:下载安装 → 首次启动 → 导入音乐或登录账号。

1 · 下载与安装

前往 下载页,通过 GitHub Release、百度网盘或 123 网盘获取安装包,三大平台随 Release 同步发布。

平台安装方式
Windows运行 QueMusicSetup.exe,按向导完成。若 SmartScreen 提示未知发布者,选「更多信息 → 仍要运行」即可(未签名属正常现象)。
macOS打开 .dmg,把 QueMusic 拖进「应用程序」。
Linuxchmod +x QueMusic-x86_64.AppImage 然后运行。
macOS 用户必读 · 提示「已损坏,无法打开」不是文件坏了喵,是 macOS 在拦截未公证 App。 按 macOS 安装说明 做一次就好(一条命令,或不用终端的图形界面做法)。

2 · 登录音乐平台账号(可选)

不登录也能听本地音乐和大部分在线公开内容。想听会员、付费或版权受限的曲目,登录对应平台账号授权即可 —— 真实登录的酷狗账号可以听高品质与 VIP 歌曲。

重要 · QueMusic 不提供、不存储、不缓存任何音乐文件。在线音频能力均通过第三方平台个人账号授权获取, 付费、会员及受限制内容请遵循第三方平台版权。

3 · 导入本地音乐

  • 打开左侧导航栏的「本地文件」页面,选择存放音乐的文件夹(支持多选)
  • QueMusic 自动扫描建库,并按优先级匹配歌词:.lrc 同名文件 → 内嵌歌词 → 在线匹配
  • 想听网盘里的歌?「文件」页的 WebDAV 分页添加服务器即可浏览远端目录并直接播放,听过的曲目会自动缓存,离线也能播喵

使用教程

认识界面、摸清脾气,把 QueMusic 用得得心应手。

界面导览

主界面四个区域,对应 layout/ 下的 QML 文件:

左侧导航栏

LeftSideBar.qml · 在首页、搜索、收藏、本地文件、下载管理之间切换。

主内容区

MainContent.qml · 页面按需异步加载,切页不阻塞主线程。

播放控制栏

PlayerControl.qml · 播放 / 暂停、切歌、进度、音量与播放队列。

沉浸歌词界面

PlayerMaxCenter.qml · 沉浸歌词、流体背景与频谱,界面本身可以整块替换喵。

在线音乐与搜索

网易云、酷狗、哔哩哔哩在界面里的操作完全一致 —— 音质高档缺失时还会自动降级回退,很贴心:

  • 搜索:歌曲、歌手、歌单,支持搜索历史
  • 私人漫游:基于收听偏好的每日推荐
  • 分类歌单 / 排行榜 / 歌手页:滚动到底自动翻页
  • 音质选择:标准 128k / 高清 320k / 无损 FLAC(需对应平台权限)
  • 下载管理:多任务下载、进度、重试

歌词与沉浸体验

  • 逐字歌词:逐音节时间轴驱动的卡拉 OK 高亮 + 逐行弹簧动画
  • 桌面歌词 / 桌面小窗:悬浮于其他窗口之上
  • 对唱歌词:多人歌曲按角色分行
  • 歌词界面可换:内置「默认 / 极简 / 自由 / 3D」四种主题,播放页左上角第二个按钮随时切换
  • 3D 主题:GPU 点云舞台 + 真透视歌词平面,相机由鼠标驱动,场景随音乐增亮

均衡器与音频处理

全部 DSP 在音频线程内逐样本完成,界面再忙也不影响音质:

  • 10 段参数均衡器:±24 dB、10 组预设、可调 Q 值与自动余量
  • 变速与变调:0.25×–4× 倍速(可保持音调),±12 半音独立移调,可叠加
  • 声道处理:平衡、单声道折叠、立体声宽度、声道互换
  • ReplayGain:响度归一 + 限幅防削波;切歌淡入淡出逐样本完成
  • 输出可调:采样率、缓冲(10–100 ms)、输出设备播放中热切换

本地歌词匹配规则

  • 同目录同名 .lrc(或 .txt)文件
  • 内嵌歌词 — ID3v2 SYLT / USLT 与 TagLib LYRICS(FLAC、Ogg/Opus、MP4/M4A 常见)
  • 在线匹配(含翻译)
  • 「纯音乐,请欣赏」占位

设置、外观与快捷键

设置页分为主题、界面、功能、播放、快捷键、插件等模块:浅色 / 深色 / 跟随系统,封面主色实时驱动自适应主题。播放页「播放器样式」弹窗可调歌词大小与位置校准。快捷键在「设置 → 快捷键」中自定义。

插件开发

界面里能换的、能加的,都是插件。一个文件夹就是一个插件,放进去即被扫描到 —— 不用编译、不用改主程序喵。

歌词界面插件

换掉沉浸播放页的歌词界面。宿主注入播放进度、歌词数据与配色,插件只负责呈现;同时只用一个,播放页随时切换。

功能插件

往界面里加东西:标题栏、底栏、侧栏、整窗覆盖层都是开放扩展点。可同时启用多个。

安装插件

  • 下载 QuePlugins 仓库(或某个插件文件夹)
  • 歌词界面插件:设置 → 插件 → 歌词界面 → 安装插件,选文件夹后点「启用」
  • 功能插件:设置 → 插件 → 功能 → 安装插件,装好即启用,列表里可开关
  • 加载失败的插件会被自动停用;停用 / 卸载时宿主回收插件挂出的一切
安全提示 · 插件是 QML 代码,会以应用权限运行,请只安装你信任的插件。

目录结构与 info.json

两类插件目录约定一致,文件夹名即插件 id(小写字母、数字、-、_):

text 插件目录结构
lyrics/example/               歌词界面插件
  info.json                   插件信息(必要)
  example.qml                 入口 QML(必要,文件名在 info.json 指定)
  info.png                    预览图(建议,列表里显示)
  shaders/wave.frag.qsb       自定义着色器(可选,需预编译为 .qsb)
Tools/example/                功能插件(目录约定相同)
json info.json
{
  "apiVersion": 1,
  "name": "波浪示例",
  "author": "QueMusic",
  "version": "1.0.0",
  "description": "着色器波浪背景 + 逐字高亮 + 双语翻译",
  "entry": "example.qml",
  "preview": "info.png"
}

歌词界面插件契约

入口根类型为 Item。声明同名属性,宿主就会自动绑定;没写的自动跳过,只实现自己需要的部分就好:

qml lyrics/example/example.qml
import QtQuick

Item {
    // ---- 播放状态 ----
    property real position          // 播放位置(毫秒)
    property bool playing           // 是否正在播放
    property bool mediaActive       // 是否有媒体

    // ---- 歌词数据 ----
    property var  lyricsModel       // 歌词行(time / text / info / isOther)
    property var  translateModel    // 翻译行,与 lyricsModel 同下标对应
    property int  currentIndex      // 当前行下标(宿主按进度持有)

    // ---- 歌曲信息与外观 ----
    property string title
    property string artist
    property url    coverUrl
    property color  mainColor       // 封面取色主题主色

    // 可选:宿主约每 320ms 调一次,用于推进自定义动画
    function timerFunction() { }

    // 可选:在「播放器样式」弹窗里追加自定义选项
    property Component styleOptions
}

样式改动一律走 requestStyle(key, value) 白名单接口;逐字高亮用每行的 info 时间轴数组。

功能插件契约

入口根类型为 QtObject 或 Item,声明 property QtObject api,宿主在 Component.onCompleted 之前注入:

qml Tools/example/example.qml
import QtQuick
import QueMusic 1.0

QtObject {
    id: plugin
    property QtObject api        // 宿主注入

    function activate() {
        var btn = api.mount("player.right", btnComp)          // 挂到播放控制栏右侧
        var panel = api.loader(api.pluginUrl + "panel.qml",
                               { width: 240, height: 160 })   // 自建面板
    }

    property Component btnComp: Component {
        // import QueMusic 1.0 可用 Style / SButton 等宿主组件
    }
}

扩展点:titlebar.left / titlebar.right、player.left / player.right、sidebar.bottom、window.overlay。插件还有 api.settings 私有配置与 api.toast() 可用。

着色器注意事项

Qt 6 的 ShaderEffect 不编译运行时 .frag,插件自带着色器必须预编译成 .qsb,否则效果会静默消失喵:

bash qsb 预编译
qsb --glsl "100 es,120,150,300 es,310 es,320 es" --hlsl 50 --msl 12 \
    -o shaders/wave.frag.qsb shaders/wave.frag
完整规范 · 字段、契约与可安装的官方示例见 歌词界面插件规范 与 功能插件规范。 欢迎向 QuePlugins 提交你的插件!

项目结构

了解仓库的组织方式,是参与开发的第一步喵。

QueMusic/
├── CMakeLists.txt              # 顶层构建配置
├── CMakePresets.json           # 各平台构建预设
├── cmake/                      # CMake 模块(子模块集成 / 运行库部署 / FFmpeg 拉取)
├── main.cpp                    # C++ 程序入口
├── main.qml                    # QML 主入口(窗口 / 全局单例装配)
├── SettingsView.qml            # 设置页
├── cpp/                        # C++ 后端
│   ├── audio/                  # 音频引擎:AudioEngine / FfmpegDecoder / AudioDsp / AudioRing
│   ├── plugins/                # 插件存储:LyricsPluginStore / FunctionPluginStore
│   ├── webdav/                 # WebDAV:WebDavClient / WebDavModel / WebDavCache
│   ├── CoverHelper.cpp/h       # 封面提取与磁盘缓存
│   ├── ColorExtractor.cpp/h    # 封面取主色(自适应主题)
│   ├── LocalMusicScanner.cpp/h # 本地曲库扫描
│   ├── LocalLyricsReader.cpp/h # .lrc 与内嵌歌词读取
│   └── DbService.cpp/h         # 数据库线程化服务
├── api/                        # 在线媒体引擎
│   ├── MusicApiService.cpp/h   # 调度中枢(QML 单例 MusicApi)
│   ├── NeteaseCloudApi.cpp/h   # 网易云音乐
│   ├── KugouApi.cpp/h          # 酷狗音乐
│   └── BilibiliApi.cpp/h       # 哔哩哔哩
├── components/                 # 自研 QML 组件库(Style / Options / Q*** 控件)
├── layout/                     # 页面布局(侧栏 / 内容区 / 播放栏 / 沉浸歌词)
├── pages/                      # 功能页面(首页 / 搜索 / 歌单 / 收藏 / 文件 / 下载)
├── lyricsui/                   # 歌词界面主题(极简 / 自由 / 3D)
├── shaders/                    # GLSL 着色器与 C++ 材质
├── packaging/                  # 各平台打包脚本
├── tests/                      # 音频管线等离线自测
├── ThirdParty/qwindowkit/      # Git 子模块 —— 无边框窗口框架
├── CHANGELOG.md                # 更新日志
├── LICENSE                     # Apache License 2.0
└── README.md

模块职责速查

目录职责技术
cpp/audio自研音频引擎:FFmpeg 解码 → 无锁环形缓冲 → 音频回调线程(DSP 在音频线程内完成)C++20 / FFmpeg
api/多平台在线媒体统一接入层,QML 侧感知不到平台差异C++20 / QCloudMusicApi
components/自研 QML 控件库与全局单例QML
layout/ pages/界面骨架与功能页面,按需异步加载QML
shaders/模糊卡片、歌词渐进模糊、3D 场景等自定义渲染GLSL / Qt RHI

构建指南

从源码构建 QueMusic:需要 Qt 6.10+、CMake ≥ 3.24 与支持 C++20 的编译器。

前置条件

  • Qt 6.10+(Core / Gui / Quick / Qml / Network / Multimedia / Sql / Concurrent / ShaderTools)
  • CMake ≥ 3.24(需预设支持),推荐 Ninja
  • 编译器:MSVC 2022 / GCC 13+ / MinGW 13+ / LLVM-MinGW 17+ / Clang
  • FFmpeg 开发库:Windows 执行 cmake/fetch_ffmpeg.ps1;Debian/Ubuntu 装的是 libavcodec-dev libavformat-dev libavutil-dev libswresample-dev

克隆仓库(务必携带子模块)

bash 克隆(含子模块)
git clone --recurse-submodules https://github.com/BroNekoX/QueMusic.git
cd QueMusic

# 忘了拉子模块的话补一条:
git submodule update --init --recursive

方式一 · 使用 just(推荐)

bash just 构建与运行
just setup  # 首次使用:拉取子模块
just b      # 构建
just r      # 运行

方式二 · 使用 CMake Presets

平台预设名编译器
Windowswin-llvm-mingw-releaseLLVM-MinGW
Windowswin-mingw-releaseMinGW
Linuxlinux-gcc-releaseGCC
macOSmac-clang-releaseClang
bash CMake Presets 构建
cmake --preset <preset-name>
cmake --build build/<preset-name> -j 8
./build/<preset-name>/bin/QueMusic       # Linux / macOS
./build/<preset-name>/bin/QueMusic.exe   # Windows
CMake 找不到 Qt? 设置 CMAKE_PREFIX_PATH 指向 Qt 安装目录, 例如 ~/Qt/6.10.3/llvm-mingw_64。

打包分发

  • Windows:windeployqt + Inno Setup(可选)
  • Linux:bash packaging/build-linux.sh 生成 AppImage
  • macOS:just mac-bundle 生成 .dmg

贡献指南

欢迎任何形式的贡献 —— 从点亮一颗 Star 到提交 Pull Request,每一份心意都算数喵。

方式说明
报告 Bug提交 Issue,附复现步骤与环境信息
提出新功能在 Discussions 发起讨论
Star点亮 GitHub Star,支持持续开发
测试构建并试用,反馈兼容性问题
Pull Request修复 Bug、优化代码、完善功能 —— 欢迎任何人
编写插件向 QuePlugins 提交插件

开发流程

  • Fork 本仓库
  • 创建功能分支:git checkout -b feat/your-feature
  • 提交修改:git commit -m "feat: add xxx"
  • 推送并发起 Pull Request

代码风格参考现有文件,遵循 C++20 / Qt 6 / QML best practices。动手前请读仓库中的 贡献指南。

永久免费 · QueMusic 官方版本始终保持开源与永久免费,不存在任何 Pro、高级版、捐献版, 也没有任何付费、会员、充值、赞助内容。开发者不接受任何形式的赞助、打赏与捐赠。 如果发现 QueMusic 需要付费,请立即向开发者告知。

故障排查

遇到问题先别慌,下面的情况八成能对号入座喵。

macOS 提示「已损坏,无法打开」

macOS 拦截未公证 App,不是文件损坏。按 macOS 安装说明 一条命令即可解决。

升级 v0.4.0 后设置丢失

属预期行为:v0.4.0 把配置目录统一到系统目录,旧设置不迁移。重新配置一次,此后位置不变。

某些歌曲搜不到或无法播放

项目不提供曲库,内容来自第三方平台。付费 / 受限内容需登录对应平台账号授权后收听。

本地歌词没有显示

确认同目录有同名 .lrc,或音频内嵌了 ID3v2 / TagLib 可识别的歌词标签;否则显示「纯音乐,请欣赏」。

插件装上没效果

检查 info.json 的 entry 是否指向存在的 QML;歌词界面插件需在播放页左上角第二个按钮里切换选中。失败的插件会被自动停用,可重新扫描。

构建时找不到子模块

补执行 git submodule update --init --recursive 后重新配置。

还没解决?到 GitHub Issues 提交问题 (附系统版本、QueMusic 版本与复现步骤),或加入 QQ 群 1105114511 直接交流。

许可证与致谢

QueMusic 站在巨人的肩膀上,也把自由还给每一个使用者喵。

主体许可证

项目主体遵循 Apache License 2.0 —— 允许自由使用、修改、分发甚至商用,需保留版权声明与 NOTICE,专利授权条款明确。

关于背景着色器

  • Fluid — 移植自 Paper-design/shaders(Apache-2.0,引用合规)
  • Classic — 自研实现,参考 AMLL 思路但算法、代码与数值均未照搬

技术栈

类别技术
框架Qt 6.10.3 Community
语言C++20 / QML / JavaScript
构建CMake ≥ 3.24 / Ninja;Release 默认 LTO 与 PCH
音频FFmpeg 解码 + 自研 DSP(均衡 / 变速 / 变调 / 响度归一 / 限幅)
渲染Qt RHI —— 直连 D3D11 / Metal / Vulkan / OpenGL,自定义 GLSL
界面Qt Quick + 自研组件库 + QWindowKit 无边框窗口
在线接口QCloudMusicApi + Crypto++(网易云)/ 自研酷狗、哔哩哔哩接口层

致谢

  • Qt Project — 强大的跨平台框架
  • QWindowKit — 无边框窗口解决方案
  • QCloudMusicApi — 网易云音乐在线接口实现
  • Crypto++ / libqrencode / TagLib — 加解密、二维码与元数据解析
  • SMTC-Bridge-Cpp / smtc_bridge_rust — Windows 系统媒体控件桥接参考
  • Paper-design/shaders — 背景着色器 Fluid 的算法移植
  • EvolveUI / AMLL-Core / ShaderToy — 组件设计与着色器灵感
  • 所有贡献者与测试者

免责声明要点

音乐版权 · 所有音乐内容版权归原始权利人所有,本项目不提供、不存储、不缓存任何音乐文件。
在线服务 · 仅调用各平台公开接口,不含任何破解、绕过付费、解锁 VIP 等行为。
使用者责任 · 遵守所在地法律法规及第三方平台服务条款,后果由使用者自行承担。
无担保 · 本项目按「现状」(AS-IS)提供,不附带任何明示或暗示的担保。