🎶 Ter-Music v2.0.0 — All-New Experience! ✨
Released: 2026-06-05
Developer: @YXZL985 (Yanxi Bamboo Forest)
Repository: https://github.com/YXZL985/ter-music
License: GPL-3.0-or-later
🎌 Gaokao Special — 高考特别寄语
To all Chinese students sitting the National College Entrance Exam (Gaokao) around June 7 — this one's for you! 🩷
📚 Ten years of dedication, now it's time to shine!
✨ Stay calm, trust your preparation, and give it everything you've got.
🏆 The battle isn't over until the last paper is handed in — you can still be the dark horse!
🎯 When you close your pen cap at the end, may you feel the pride of a warrior sheathing their sword.You've got this! You can do it! (๑•̀ㅂ•́)و✧ — May your name be on the gold list! 🎉🎉🎉
「The great roc rises with the wind in a single day, soaring straight up ninety thousand miles." — Li Bai 🦅
💪 Whether you're grinding practice problems or browsing repos, may this little terminal music player bring a touch of melody and strength to your journey. Every note, every line of code, is dedicated to you.
#GaokaoWarriors #StayStrong #YouCanDoIt 🌟
🌟 English Version
What's New in v2.0.0
This is a major milestone release (`・ω・´) bringing a 10-band graphic equalizer, CUE sheet support, a native PipeWire audio backend, a 17-mode PlayMode system, SQLite music library, and a massive internal refactor — all while staying as a lean terminal app! ( •̀ ω •́ )✧
🎛️ 10-Band Graphic Equalizer
- 10-band biquad IIR DSP equalizer with visual bar UI ✨
- Configure bands from 31Hz to 16kHz with precise gain control
- Real-time visual feedback in the terminal (っ◕‿◕)っ
🎵 CUE Sheet & Metadata
- Full CUE sheet support — split FLAC/APE/WV into virtual tracks (ノ◕ヮ◕)ノ*:・゚✧
- Auto-detect CUE encoding with configurable fallback (GBK/BIG5/Shift-JIS)
- Embedded lyrics priority — extracts lyrics from FFmpeg metadata & APE tags
- Native APEv2 tag parser with GBK encoding recovery ( ̄▽ ̄)ノ
🔌 PipeWire Audio Backend
- New native PipeWire audio backend, co-equal with PulseAudio & ALSA
- Runtime dlopen — PipeWire is detected at startup, no compile-time dependency
- Automatic fallback: PipeWire → PulseAudio → ALSA (◕‿◕✿)
🎮 PlayMode & Play Queue
- 17 playback modes — replace old LoopMode with full PlayMode enum
- Sequential, Single Repeat, List Repeat, Shuffle Once, Shuffle Repeat
- Folder Sequential / Repeat / Shuffle / Shuffle Repeat
- Album Sequential / Repeat / Shuffle / Shuffle Repeat
- Artist Sequential / Repeat / Shuffle / Shuffle Repeat
- Play Queue system with persistence and full UI (queue numbers, now-playing indicator)
- Seamless preload toggle (default off) for gapless transition (•̀ᴗ•́)و
🎨 UI/UX Enhancements
- New popup menu system — dual-mode playlist, suspend progress bar on popup
- Color palette expanded to 24 presets + 1 custom slot with paired-color guard ◉‿◉
- Right-side selection menu — replaced +/- adjust controls
- Queue UI with sequence numbers, now-playing indicator, and dedicated keybindings
- Scrollbar module for playlist, lyrics, and help panes
- Help page with scrolling and search (F8)
⚡ Performance & Reliability
- Segment buffer RSS reduced from ~40MB to ~20MB ( ゚д゚)
🗄️ SQLite Music Library
- SQLite-backed music library with full metadata persistence
- Library browser UI — browse, search, and manage your collection
- JSON migration — seamless upgrade from older config formats (•̀ω•́)ゞ
🛠️ Build & Packaging
- Static FFmpeg linking — single DEB/RPM compatible across Debian 10
13 / EL810 - Portable tar.gz — bundle all deps, run anywhere (´▽`ʃ♡ƪ)
- AppImage — single-file distribution (requires FUSE)
- Linyaps (如意玲珑) — deepin/UOS compatible package
- aarch64/arm64 DEB — cross-compiled via Docker
- RPM SRPM — source RPM included for every binary RPM
- All builds available in
build/release/٩(◕‿◕。)۶
📋 Full Changelog (v1.11.1 → v2.0.0)
46 commits — all by YXZL985
| Commit | Description |
|---|---|
28fb281 |
fix(arch): update PKGBUILD and .SRCINFO for v1.11.1 |
4681f8f |
feat(config): migrate AppConfig from JSON to XML format |
336b5eb |
chore(deps): add libxml2 to all packaging scripts and Dockerfiles |
343923b |
feat(library): add SQLite-backed music library with metadata persistence |
7961918 |
feat(library): add JSON migration and library browser UI |
6954c32 |
chore: remove tracked test binary, add tests/test_config to gitignore |
4536a8f |
chore: remove orphaned test file — not integrated in build or CI |
05a06cf |
refactor: remove all JSON persistence, SQLite is the sole storage layer |
c880005 |
feat: add PipeWire native audio backend, co-equal with PulseAudio/ALSA |
05b3688 |
fix: migrate from PipeWire RT_PROCESS to DONT_RECONNECT, add PA fallback, fix UI corruption |
3131c03 |
refactor: migrate include headers to org.yxzl.ter-music namespace |
5d00eeb |
refactor: split menus.c and ui/ui.c into focused modules |
875e0d6 |
refactor: split audio/audio.c into focused modules |
bf6d3df |
build: update CMakeLists.txt with new split source files |
2a230c8 |
fix: add missing includes to eliminate all implicit-function-declaration warnings |
2adebc9 |
refactor: replace LoopMode with PlayMode enum (17 modes), add PlayQueue/PopupState structs |
e4c592d |
refactor: rewire audio engine to use PlayMode + PlayQueue |
e8d62ab |
fix: migrate config from default_loop_mode to default_play_mode |
e3e6ea3 |
feat: popup menus, dual-mode playlist, suspend progress bar on popup |
c911c02 |
feat: settings add Play Mode section, update sidebar and menu |
35fa97c |
fix: update MPRIS session and build for PlayMode |
8fda823 |
feat: replace +/- adjust with right-side selection menu in settings |
17a6cfb |
feat: expand color palette to 24 presets + 1 custom slot with paired-color guard |
b784405 |
feat: add queue persistence, playlist integration, and navigation fixes |
0e148b1 |
feat: queue UI with sequence numbers, now-playing indicator, and keybindings |
11bfcdc |
fix: popup menu bottom overflow, visual remnants, ESC dismiss, mouse click support, and scroll |
852812a |
fix: controls pane speed and loop mode changes not taking effect |
57eb620 |
feat: segment buffer playback refactor + queue/file-browser UX fixes |
91c6e83 |
perf: reduce segment buffer RSS from ~40MB to ~20MB |
4e64885 |
feat: add seamless preload toggle (default off) |
64d4a92 |
fix: correct settings array index for seamless preload toggle |
d40ec74 |
fix: remove duplicate settings labels after rebase merge |
c6c90ee |
feat: CUE split-track support for FLAC/APE/WV |
fc2b5d5 |
feat: embedded lyrics priority with FFmpeg/APE extraction |
070f06c |
feat: auto-detect CUE file encoding with configurable fallback (GBK/BIG5/Shift-JIS) |
68c722b |
fix: popup menu fill & text color — remove wbkgd, explicit fill, wattrset |
669ce5e |
feat: 10-band graphic equalizer with biquad IIR DSP and visual bar UI |
351b68c |
chore: bump version to v2.0.0, update debian changelog |
5e90554 |
chore: bump AUR pkgver to 2.0.0 |
19393d3 |
chore: fix build scripts for v2.0.0 — update defaults, detect version from types.h |
9676a21 |
fix: add missing build deps (sqlite3, dbus, alsa) for linyaps |
0055911 |
docs: update all docs for v2.0.0 — PipeWire, PlayMode (17), EQ, CUE, library, queue |
289d958 |
docs: update help-quickstart texts for v2.0.0 |
5bef1e8 |
fix: ensure -v version flag works in container/static builds |
05cd216 |
fix(deb): don't abort binary build when source package generation fails |
880031a |
feat: add scripts/build/launch-auto-build.sh — one-click multi-format build entry |
📦 Release Artifacts
All files are located in build/release/ ヽ(・∀・)ノ
| File | Format | Arch |
|---|---|---|
ter-music_2.0.0-1_amd64.deb |
DEB (static FFmpeg) | amd64 |
ter-music_2.0.0-1_arm64.deb |
DEB | arm64 |
ter-music-2.0.0-1.el8.x86_64.rpm |
RPM (static FFmpeg) | amd64 |
ter-music-2.0.0-1.el8.src.rpm |
RPM Source (SRPM) | amd64 |
ter-music_2.0.0.orig.tar.gz |
DEB Source (upstream tarball) | amd64 |
ter-music_2.0.0-1.debian.tar.xz |
DEB Source (debian packaging) | amd64 |
ter-music_2.0.0-1.dsc |
DEB Source (control file) | amd64 |
ter-music-2.0.0-x86_64.AppImage |
AppImage | amd64 |
ter-music-2.0.0-portable-x86_64.tar.gz |
Portable tar.gz | amd64 |
org.yxzl.ter-music_2.0.0_x86_64.uab |
Linyaps (如意玲珑) | amd64 |
💡 Pro-tip:
- For Debian/Ubuntu/deepin users: use the
.debpackage- For Fedora/RHEL/Rocky users: use the
.rpmpackage- For any Linux: grab the
portable tar.gz(no deps needed!)- For deepin/UOS with Linyaps: use the
.uabpackage- For ARM64 (Raspberry Pi, etc.): use the
arm64.debpackage
🙏 Special Thanks
- All users who provided feedback and bug reports (◕‿◕)♡
- The FFmpeg, PulseAudio, PipeWire, ncurses, and SQLite communities for their awesome libraries
- The AppImage, Linyaps, and Debian/RPM packaging ecosystems (´。• ᵕ •。`) ✦
🎌 Go for it, Gaokao Warriors! 🚀
✨ May the moment you close your pen cap feel like a swordsman sheathing their blade with pride. ✨
✏️ The Gaokao in June is just the beginning — the stars and the sea await you beyond the exam hall.
🎧 When you're tired, put on your earphones and let ter-music keep you company through those late-night study sessions.
🏁 The wind will cleave the waves, and the clouds will part — set sail across the vast, deep sea! — Li Bai㊗️ To every student walking into that exam hall:
🏆 Gold List, Your Name 🏆 Top Honors 🏆 A Bright Future 📖 Inspire the Page 📖 Exceed Yourself 📖 Dreams Come True(っ˘ω˘ς) You can do it! — From the ter-music develop group ❤️
🎶 Ter-Music v2.0.0 — 全新升级! ✨
发布日期: 2026-06-05
开发者: @YXZL985 (燕戏竹林)
仓库: https://github.com/YXZL985/ter-music
许可证: GPL-3.0-or-later
🌟 中文版
🎌 📢 高考特别寄语
全国高考日(6月7日前后)在即, ter-music v2.0.0 向所有高三学子致以最诚挚的祝福! 🩷
📚 十年磨一剑,今朝试锋芒!
✨ 愿你提笔从容,落笔生花,所有努力都在考场上绽放!
🏆 乾坤未定,你我皆是黑马!稳住心态,超常发挥!
🎯 合上笔盖的那一刻,有着战士收刀入鞘的骄傲!加油!加油!加油! (๑•̀ㅂ•́)و✧ ———— 金榜题名,一定有你! 🎉🎉🎉
「大鹏一日同风起,扶摇直上九万里。」—— 李白 🦅
💪 无论你在刷题还是刷 repo,愿这款小小的终端播放器能为你的备考路添一丝旋律与力量!
v2.0.0 新特性一览
这是一个重大里程碑版本 (`・ω・´) 带来了 10 段图形均衡器、CUE 分轨支持、原生 PipeWire 音频后端、17 种播放模式系统、SQLite 音乐库 以及大规模内部重构——同时仍然保持轻量级终端应用的身份!( •̀ ω •́ )✧
🎛️ 10 段图形均衡器
- 10 段双二阶 IIR DSP 均衡器,配有可视化柱状界面 ✨
- 可调节 31Hz 至 16kHz 各频段,精确控制增益
- 终端内实时视觉反馈 (っ◕‿◕)っ
🎵 CUE 分轨 & 元数据
- 完整 CUE 分轨支持 — 将 FLAC/APE/WV 分割为虚拟曲目 (ノ◕ヮ◕)ノ*:・゚✧
- 自动检测 CUE 编码,可配置回退编码(GBK/BIG5/Shift-JIS)
- 内嵌歌词优先 — 从 FFmpeg 元数据和 APE 标签提取歌词
- 原生 APEv2 标签解析器,支持 GBK 编码恢复 ( ̄▽ ̄)ノ
🔌 PipeWire 音频后端
- 全新的原生 PipeWire 音频后端,与 PulseAudio 和 ALSA 并列
- 运行时 dlopen 加载 — PipeWire 在启动时自动检测,无编译时依赖
- 自动回退:PipeWire → PulseAudio → ALSA (◕‿◕✿)
🎮 播放模式 & 播放队列
- 17 种播放模式 — 用完整的 PlayMode 枚举取代旧版 LoopMode
- 顺序、单曲循环、列表循环、随机一次、随机循环
- 文件夹顺序 / 循环 / 随机 / 随机循环
- 专辑顺序 / 循环 / 随机 / 随机循环
- 艺术家顺序 / 循环 / 随机 / 随机循环
- 播放队列系统,带持久化和完整 UI(队列序号、正在播放指示器)
- 无缝预加载开关(默认关闭),实现无缝切换 (•̀ᴗ•́)و
🎨 界面增强
- 全新弹出菜单系统 — 双模式播放列表,弹出时暂停进度条
- 配色方案扩展至 24 种预设 + 1 个自定义槽位,带配色保护 ◉‿◉
- 右侧选择菜单 — 取代了 ± 调节控件
- 队列 UI — 序列号、正在播放指示器和专用快捷键
- 滚动条组件 — 播放列表、歌词和帮助面板
- 帮助页面,支持滚动和搜索(F8)
⚡ 性能与可靠性
- 段缓冲区内存占用从 ~40MB 降至 ~20MB ( ゚д゚)
🗄️ SQLite 音乐库
- 基于 SQLite 的音乐库,完整元数据持久化
- 库浏览器界面 — 浏览、搜索和管理您的音乐收藏
- JSON 迁移 — 从旧配置格式无缝升级 (•̀ω•́)ゞ
🛠️ 构建与打包
- FFmpeg 静态链接 — 单个 DEB/RPM 包兼容 Debian 10
13 / EL810 - 便携压缩包 — 包含所有依赖,随处运行 (´▽`ʃ♡ƪ)
- AppImage — 单文件分发(需要 FUSE 支持)
- 如意玲珑 (Linyaps) — deepin/UOS 兼容包格式
- aarch64/arm64 DEB — 通过 Docker 交叉编译
- RPM SRPM — 每个 RPM 二进制包均附带源码包
- 所有构建产物位于
build/release/目录 ٩(◕‿◕。)۶
📋 完整提交记录 (v1.11.1 → v2.0.0)
46 次提交 — 全部由 YXZL985 完成
| 提交哈希 | 说明 |
|---|---|
28fb281 |
fix(arch): 更新 PKGBUILD 和 .SRCINFO 至 v1.11.1 |
4681f8f |
feat(config): AppConfig 从 JSON 迁移至 XML 格式 |
336b5eb |
chore(deps): 在所有打包脚本和 Dockerfile 中添加 libxml2 |
343923b |
feat(library): 添加基于 SQLite 的音乐库及元数据持久化 |
7961918 |
feat(library): 添加 JSON 迁移和库浏览器 UI |
6954c32 |
chore: 移除已跟踪的测试二进制文件,添加 tests/test_config 到 gitignore |
4536a8f |
chore: 移除孤立测试文件 — 未集成到构建或 CI |
05a06cf |
refactor: 移除所有 JSON 持久化,SQLite 成为唯一存储层 |
c880005 |
feat: 添加原生 PipeWire 音频后端,与 PulseAudio/ALSA 并列 |
05b3688 |
fix: PipeWire RT_PROCESS 改为 DONT_RECONNECT,添加 PA 回退,修复 UI 损坏 |
3131c03 |
refactor: 将头文件迁移至 org.yxzl.ter-music 命名空间 |
5d00eeb |
refactor: 拆分 menus.c 和 ui/ui.c 为独立模块 |
875e0d6 |
refactor: 拆分 audio/audio.c 为独立模块 |
bf6d3df |
build: 更新 CMakeLists.txt,添加新的拆分源文件 |
2a230c8 |
fix: 补充缺失的头文件,消除所有隐式函数声明警告 |
2adebc9 |
refactor: 用 PlayMode 枚举(17 种模式)替换 LoopMode,添加 PlayQueue/PopupState 结构体 |
e4c592d |
refactor: 将音频引擎重构为 PlayMode + PlayQueue 架构 |
e8d62ab |
fix: 配置项从 default_loop_mode 迁移至 default_play_mode |
e3e6ea3 |
feat: 弹出菜单、双模式播放列表、弹出时暂停进度条 |
c911c02 |
feat: 设置中添加播放模式部分,更新侧边栏和菜单 |
35fa97c |
fix: 更新 MPRIS 会话和 PlayMode 构建 |
8fda823 |
feat: 用右侧选择菜单取代 ± 调节控件 |
17a6cfb |
feat: 配色方案扩展至 24 种预设 + 1 个自定义槽位,带颜色配对保护 |
b784405 |
feat: 添加播放队列持久化、播放列表集成和导航修复 |
0e148b1 |
feat: 队列 UI 带序列号、正在播放指示器和快捷键 |
11bfcdc |
fix: 弹出菜单底部溢出、残留显示、ESC 关闭、鼠标点击支持和滚动 |
852812a |
fix: 控制面板速度和循环模式变更不生效 |
57eb620 |
feat: 段缓冲区播放重构 + 队列/文件浏览器 UX 修复 |
91c6e83 |
perf: 段缓冲区 RSS 从 ~40MB 降至 ~20MB |
4e64885 |
feat: 添加无缝预加载开关(默认关闭) |
64d4a92 |
fix: 修正无缝预加载开关的设置数组索引 |
d40ec74 |
fix: 移除 rebase 合并后的重复设置标签 |
c6c90ee |
feat: 添加 CUE 分轨支持(FLAC/APE/WV) |
fc2b5d5 |
feat: 内嵌歌词优先提取(FFmpeg/APE) |
070f06c |
feat: 自动检测 CUE 文件编码,可配置回退(GBK/BIG5/Shift-JIS) |
68c722b |
fix: 弹出菜单填充和文字颜色 — 移除 wbkgd,显式填充,wattrset |
669ce5e |
feat: 10 段图形均衡器(双二阶 IIR DSP + 可视化柱状 UI) |
351b68c |
chore: 版本号升至 v2.0.0,更新 debian changelog |
5e90554 |
chore: AUR pkgver 升至 2.0.0 |
19393d3 |
chore: 修复 v2.0.0 构建脚本 — 更新默认值,从 types.h 检测版本 |
9676a21 |
fix: 为 linyaps 添加缺失的构建依赖(sqlite3, dbus, alsa) |
0055911 |
docs: 更新所有文档至 v2.0.0 — PipeWire、PlayMode(17)、EQ、CUE、库、队列 |
289d958 |
docs: 更新帮助快速上手文本至 v2.0.0 |
5bef1e8 |
fix: 确保 -v 版本标志在容器/静态构建中正常工作 |
05cd216 |
fix(deb): 源码包生成失败时不中止二进制构建 |
880031a |
feat: 添加 scripts/build/launch-auto-build.sh — 一键多格式构建入口 |
📦 发布产物
所有文件位于 build/release/ 目录 ヽ(・∀・)ノ
| 文件 | 格式 | 架构 |
|---|---|---|
ter-music_2.0.0-1_amd64.deb |
DEB(FFmpeg 静态链接) | amd64 |
ter-music_2.0.0-1_arm64.deb |
DEB | arm64 |
ter-music-2.0.0-1.el8.x86_64.rpm |
RPM(FFmpeg 静态链接) | amd64 |
ter-music-2.0.0-1.el8.src.rpm |
RPM 源码包 (SRPM) | amd64 |
ter-music_2.0.0.orig.tar.gz |
DEB 源码(上游原始压缩包) | amd64 |
ter-music_2.0.0-1.debian.tar.xz |
DEB 源码(Debian 打包配置) | amd64 |
ter-music_2.0.0-1.dsc |
DEB 源码(控制文件) | amd64 |
ter-music-2.0.0-x86_64.AppImage |
AppImage | amd64 |
ter-music-2.0.0-portable-x86_64.tar.gz |
便携压缩包 | amd64 |
org.yxzl.ter-music_2.0.0_x86_64.uab |
如意玲珑 (Linyaps) | amd64 |
💡 小贴士:
- Debian/Ubuntu/deepin 用户:使用
.deb包- Fedora/RHEL/Rocky 用户:使用
.rpm包- 任意 Linux:下载
portable tar.gz(无需安装依赖!)- deepin/UOS 玲珑环境:使用
.uab包- ARM64(树莓派等):使用
arm64.deb包
🙏 特别鸣谢
- 所有提供反馈和 bug 报告的用户 (◕‿◕)♡
- FFmpeg、PulseAudio、PipeWire、ncurses 和 SQLite 社区提供的优秀库
- AppImage、如意玲珑和 Debian/RPM 打包生态系统 (´。• ᵕ •。`) ✦
🎌 高考加油!志在必得!🚀
✨ 愿你在合上笔盖的刹那,有侠客收剑入鞘的骄傲 ✨
✏️ 六月高考,九月启航,星辰大海,始于笔下。
🎧 累了就戴上耳机,让 ter-music 陪你度过每一个挑灯夜战的夜晚。
🏁 长风破浪会有时,直挂云帆济沧海!—— 李白《行路难》㊗️ 所有考生:
🏆 金榜题名 🏆 蟾宫折桂 🏆 前程似锦 📖 妙笔生花 📖 超常发挥 📖 梦想成真(っ˘ω˘ς) 加油!你可以的! ——— ter-music 开发组敬上