Releases: HuanSoft-Open-Source-Community/ter-music
Release list
v2.0.0
🎶 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:
v1.11.1
🎵 ter-music v1.11.1 — A Little Bit More Love for Your Ears 🐾
Because every terminal deserves a melody... 🎶✨
🌟 English
What's New in v1.11.1? (ノ◕ヮ◕)ノ*:・゚✧
This release brings a brand-new native APEv2 tag parser 🏷️, smoother playback 🎧, better cross-distro packaging 📦, and loads of build system love 💕.
✨ Features
- 🏷️ Native APEv2 Tag Parser — Say goodbye to garbled metadata! Added a full native APEv2 parser with automatic GBK encoding detection & recovery, so your Chinese-tagged music finally looks right in the player (。♥‿♥。)
- 🔄 Cross-compile Support — Added
libswscale-devto build dependencies, enabling smoother cross-architecture builds (ARM64, LoongArch, etc.)
🐛 Bug Fixes
- 🔊 PulseAudio Freeze — Fixed playback freeze after pause + track switch by properly unblocking the PulseAudio mainloop (╥﹏╥) → (^▽^)
- 🔍 Search Bar Glitch — Fixed backspace display issue in the search bar, and added proper Chinese IME input support
- 🏷️ APE Tag GBK Fix — Fixed raw GBK byte handling in
try_gbk_fixup()for better metadata recovery - 🛠️ C89 Compilation — Fixed a C89 strict-mode compilation error for better compatibility
📦 Packaging & Build System
- 📦 Static DEB/RPM Builds — Fully containerized static builds with FFmpeg 7.1 compiled from source! Single DEB/RPM now compatible across Debian 10–13 & RHEL 8–10 (ノ´ヮ`)ノ*: ・゚
- 🐳 Dockerized Cross-Build — Refactored Dockerfiles, added
Dockerfile.deb,Dockerfile.deb-static,Dockerfile.rpm-staticfor clean separation - 🔄 RPM Improvements — Replaced
curlwitharia216-thread download for FFmpeg source (so much faster! 🚀) - 🐧 Ubuntu 24.04 Compat — Added cross-distro dependency alternatives (
libpng16-16t64,libjpeg62) so DEBs work on both Debian and Ubuntu - 👤 Ownership Fix — Docker-built packages no longer have root ownership (no more
sudo chownneeded!) - ✅ Source Packages —
.dsc&.src.rpmsource packages are now properly collected to the release directory
📚 Documentation
- Updated
README.mdandBUILD_GUIDE.mdfor the new containerized & static build flows - Added
ape_tag.cto the source file listing in translations
🧰 Full Changelog
Click to see all 20 commits ✨
$ git log --oneline v1.11.0..v1.11.1
377955a feat(metadata): add native APEv2 tag parser and fix GBK encoding recovery
e0c9018 feat(debian): add libswscale-dev Build-Depends and cross-compile support
5069078 fix(audio): fix playback freeze after pause+switch by unblocking PulseAudio mainloop
096631c fix(search): fix search bar backspace display and add Chinese input support
5f42a06 fix(metadata): handle raw GBK bytes from APE tags in try_gbk_fixup
6a57ce2 fix(deb): skip build-deps check during source package phase
d5dba1b fix(build): fix C89 compilation error and DEB source packaging
3e932a1 fix(deb): add cross-distro dependency alternatives for Ubuntu 24.04 compatibility
7183a22 fix(deb): copy source packages to release directory
b725603 fix(deb): simplify source package collection to avoid set -e issues
8282f74 fix(build): improve fix_ownership error handling and drop --privileged from cross-build
47ec062 fix(deb): also remove libswscale-dev from Build-Depends in static mode
f55eda0 fix(rpm): replace curl with aria2 16-thread download for FFmpeg source
8ac3af3 fix(deb): fix root ownership of Docker-built DEB output files
b6d0ece refactor(build): containerized and static DEB builds with CMake fix
54eba49 refactor: rename Dockerfile.static to Dockerfile.rpm-static for consistency
6ef78e0 chore: bump version to v1.11.1
2581304 docs: add ape_tag.c to source file list in README and translations
34cf7e3 docs(scripts): update README for static DEB build and Dockerfile.deb-static
390681e docs: update BUILD_GUIDE.md for containerized/static DEB builds
📥 Download
Grab the latest packages from the Releases page, or build from source:
git clone https://github.com/YXZL985/ter-music.git
cd ter-music
mkdir build && cd build
cmake .. && make
sudo make installOr grab a pre-built package:
| Format | Arch | File |
|---|---|---|
| 📦 DEB (static) | amd64 | ter-music_1.11.1-1_amd64.deb |
| 📦 DEB | arm64 | ter-music_1.11.1-1_arm64.deb |
| 📦 RPM (static) | amd64 | ter-music-1.11.1-1.el8.x86_64.rpm |
| 📦 RPM (source) | amd64 | ter-music-1.11.1-1.el8.src.rpm |
| 🖼️ AppImage | amd64 | ter-music-1.11.1-x86_64.AppImage |
| 📦 Portable | amd64 | ter-music-1.11.1-portable-x86_64.tar.gz |
| 🐚 Linyaps | amd64 | org.yxzl.ter-music_1.11.1_x86_64.uab |
🙏 Thank You!
- To everyone who filed issues and tested the pre-release builds — you're awesome! (´▽`ʃ♡ƪ)
- Special thanks to the FFmpeg team and the open-source community for making music playback possible 🎶
Happy listening! Let the music play in your terminal 🎵🐱
🌸 中文版
v1.11.1 更新内容 — 让终端多一点音乐的温柔 🐾
每一个终端都值得拥有旋律... 🎶✨
新版本有什么?(ノ◕ヮ◕)ノ*:・゚✧
这个版本带来了全新的 原生 APEv2 标签解析器 🏷️,更流畅的播放体验 🎧,更好的跨发行版打包支持 📦,以及对构建系统满满的爱 💕。
✨ 新功能
- 🏷️ 原生 APEv2 标签解析器 — 告别乱码元数据!新增完整原生 APEv2 解析器,支持自动 GBK 编码检测与恢复,让你的中文标签歌曲在播放器中正确显示 (。♥‿♥。)
- 🔄 交叉编译支持 — 新增
libswscale-dev到构建依赖,支持更顺畅的跨架构构建(ARM64、龙芯等)
🐛 问题修复
- 🔊 PulseAudio 卡死修复 — 修复了暂停后切换曲目导致的播放卡死问题,通过正确恢复 PulseAudio 主循环 (╥﹏╥) → (^▽^)
- 🔍 搜索栏问题修复 — 修复了搜索栏退格键显示问题,并添加了中文输入法支持
- 🏷️ APE 标签 GBK 修复 — 修复了
try_gbk_fixup()中原始 GBK 字节的处理逻辑,元数据恢复更可靠 - 🛠️ C89 编译修复 — 修复了 C89 严格模式下的编译错误,兼容性更好
📦 打包与构建系统
- 📦 静态 DEB/RPM 构建 — 完全容器化的静态构建,FFmpeg 7.1 从源码编译!单个 DEB/RPM 现在可以兼容 Debian 10–13 和 RHEL 8–10 (ノ´ヮ`)ノ*: ・゚
- 🐳 Docker 化交叉编译 — 重构 Dockerfile,新增
Dockerfile.deb、Dockerfile.deb-static、Dockerfile.rpm-static,职责清晰 - 🔄 RPM 构建提速 — 将 FFmpeg 源码下载从
curl替换为aria216线程下载(快多了!🚀) - 🐧 Ubuntu 24.04 兼容 — 添加跨发行版依赖替代方案(
libpng16-16t64、libjpeg62),DEB 包同时在 Debian 和 Ubuntu 上可用 - 👤 文件所有权修复 — Docker 构建的包不再属于 root(不再需要
sudo chown!) - ✅ 源码包收集 —
.dsc和.src.rpm源码包现在能正确收集到发布目录
📚 文档更新
- 更新
README.md和BUILD_GUIDE.md,适配新的容器化与静态构建流程 - 在翻译文件中将
ape_tag.c添加到源文件列表
🧰 完整提交记录
点击展开全部 20 次提交 ✨
$ git log --oneline v1.11.0..v1.11.1
377955a feat(metadata): add native APEv2 tag parser and fix GBK encoding recovery
e0c9018 feat(debian): add libswscale-dev Build-Depends and cross-compile support
5069078 fix(audio): fix playback freeze after pause+switch by unblocking PulseAudio mainloop
096631c fix(search): fix search bar backspace display and add Chinese input support
5f42a06 fix(metadata): handle raw GBK bytes from APE tags in try_gbk_fixup
6a57ce2 fix(deb): skip build-deps check during source package phase
d5dba1b fix(build): fix C89 compilation error and DEB source packaging
3e932a1 fix(deb): add cross-distro dependency alternatives for Ubuntu 24.04 compatibility
7183a22 fix(deb): copy source packages to release directory
b725603 fix(deb): simplify source package collection to avoid set -e issues
8282f74 fix(build): improve fix_ownership error handling and drop --privileged from cross-build
47ec062 fix(deb): also remove libswscale-dev from Build-Depends in static mode
f55eda0 fix(rpm): replace curl with aria2 16-thread download for FFmpeg source
8ac3af3 fix(deb): fix root ownership of Docker-built DEB output files
b6d0ece refactor(build): containerized and static DEB builds with CMake fix
54eba49 refactor: rename Dockerfile.static to Dockerfile.rpm-static for consistency
6ef78e0 chore: bump version to v1.11.1
2581304 docs: add ape_tag.c to source file list in README and translations
34cf7e3 docs(scripts): update README for static DEB build and Dockerfile.deb-static
390681e docs: update BUILD_GUIDE.md for containerized/static DEB builds
📥 下载方式
前往 Releases 页面 下载预编译包,或从源码构建:
git clone https://github.com/YXZL985/ter-music.git
cd ter-music
mkdir build && cd build
cmake .. && make
sudo make install也可直接下载预编译包:
| 格式 | 架构 | 文件 |
|---|---|---|
| 📦 DEB (静态) | amd64 | ter-music_1.11.1-1_amd64.deb |
| 📦 DEB | arm64 | ter-music_1.11.1-1_arm64.deb |
| 📦 RPM (静态) | amd64 | ter-music-1.11.1-1.el8.x86_64.rpm |
| 📦 RPM (源码) | amd64 | ter-music-1.11.1-1.el8.src.rpm |
| 🖼️ AppImage | amd64 | ter-music-1.11.1-x86_64.AppImage |
| 📦 便携包 | amd64 | ter-music-1.11.1-portable-x86_64.tar.gz |
| 🐚 如意玲珑 | amd64 | org.yxzl.ter-music_1.11.1_x86_64.uab |
🙏 感谢
- 感谢所有反馈 issue 和参与测试的朋友们——你们太棒了!(´▽`ʃ♡ƪ)
- 特别感谢 FFmpeg 团队和开源社区,让音乐播放成为可能 🎶
祝听歌愉快! 让你的终端响起音乐吧 🎵🐱
Made with 💖 and lots of ☕ by YXZL985
✦ 🐱 🎵 🎶 🐧 ✦
Ter-Music v1.11.0
🌟 Ter-Music v1.11.0 Release Notes 🎵
✨ わーい!ついに来たよ!✨ — (◍•ᴗ•◍)❤
📋 概述
v1.11.0 是一次重大功能更新 🚀,包含非同期検索、播放列表排序、音频后端运行时切换、24/32 位高清音频支持、帮助页面、滚动条、信息栏增强等功能,以及多项稳定性修复和构建系统改进。ヽ(✿゚▽゚)ノ
📊 30 个文件变更,+2572 / -555 行 ─=≡Σ((( つ•̀ω•́)つ
✨ 新功能 (New Features) ✨
🔍 异步线程搜索(#a69f493)
搜索从同步 UI 线程移至后台 pthread,增量发布结果! (ノ◕ヮ◕)ノ*:・゚✧
搜索不再阻塞用户输入或界面更新——匹配结果在扫描过程中逐步呈现,按 Escape 可随时取消搜索。ヽ(´ー`)ノ
📑 播放列表排序(#fe38652)
新增 sort-mode 设置,支持按 标题 / 艺术家 / 专辑 / 文件名 排序!(๑•̀ㅂ•́)و✧
使用间接索引数组 (sorted_indices) 映射视觉行到曲目索引,不破坏原始播放列表数据。上下曲切换、鼠标点击、媒体控制均正确遵循排序顺序。٩(◕‿◕。)۶
🎚️ 音频后端运行时切换(#b4f0806, #32c6b2d)
- PulseAudio 和 ALSA 改为运行时
dlopen/dlsym加载,不再编译时链接 🔄 - 设置 → 播放 → 音频后端 支持 Auto / PulseAudio / ALSA 三选项 ⚙️
- 重启后生效,配置持久化到
config.json💾 - 修复退出时可能卡死的问题(
wait_for_playback_thread_shutdown超时机制) (╯°□°)╯︵ ┻━┻ → ┬─┬ ノ( ゜-゜ノ)
❓ 帮助页面(#27c01e3)
F8打开帮助页面,加载双语快速入门文档 📖- 支持滚动和搜索 🔎
- 修复
F9退出无效的问题(ESC+9 处理未覆盖数字 9) (;一_一)
📜 滚动条模块(#05c3162)
新增可复用的滚动条模块!在可滚动面板(播放列表、歌词、帮助页)右侧边缘显示比例缩略块,仅在内容超出视口时可见。 (`・ω・´)✨
ℹ️ 信息栏三栏布局(#e7b8104)
播放列表信息栏从「左侧元数据 + 右侧封面」重构为 「元数据 | 音频技术信息 | 封面」 三栏布局!(★ω★)
新增采样率、位深、比特率、编码格式等音频技术信息显示。🎯
🎧 高清音频管线 16→32 位升级(#38c7b42)
将 swresample 输出、PCM 缓冲区、PulseAudio (PA_SAMPLE_S32LE)、ALSA (SND_PCM_FORMAT_S32_LE) 及频谱显示全面升级至 32 位!(ノ≧∀≦)ノ
完整保留 24 位 FLAC 无损动态范围。🎶✨
🎤 LRC 歌词增强(#4fea81a)
- 支持
[ti:]、[ar:]、[al:]头信息作为固定元数据歌词 📝 - 自动剥离内嵌
[mm:ss.xx]时间戳 ✂️
🐛 Bug 修复 (Bug Fixes) 🐛
▶️ 播放相关
- ✅ XDG/命令行打开单个音频文件时自动开始播放(#5d70562)
- ✅ XDG 打开文件时跳过恢复上次播放状态(#d58fdba)
- ✅ 修复
play_audio()破坏g_selected_index的问题(#fe38652) - ✅ 修复随机/顺序模式下首播放索引不一致(#fe38652)
🖥️ UI 稳定性
- ✅ 修复主线程阻塞 I/O 和过度渲染导致的 UI 卡死(#f4a59ec) (ノಠ_ಠ)ノ
- 渲染热路径中栈 VLA 改为堆分配缓冲区
- 冗余歌词/频谱渲染限流至 150ms(dirty mask)
- 远程下载时 curl 进度回调保持 ncurses 响应
- 大终端窗口下无歌词频谱降采样
- 级联全屏重绘改用
request_ui_refresh延迟触发
- ✅ 修复盲文专辑封面底行像素映射错误(#b598c9d) (ᓀ ᓀ)
📦 包管理和安装
- ✅ 添加
make uninstall目标(#a939cba) 🗑️ - ✅ 帮助文档增加
/usr/local前缀搜索路径(#913d479) 📂
🧊 Linyaps (玲珑)
- ✅ 修复帮助文档在玲珑容器中无法加载的问题(硬编码
/usr/local/share/路径与玲珑的/opt/apps/.../files/前缀不匹配)(ᗒᗣᗕ) - ✅ 新增
TER_MUSIC_DATA_DIR编译时定义,由CMAKE_INSTALL_PREFIX自动推导数据目录路径(#4e713c9) (`•ω•´)✧
📦 AppImage & 可移植包
- ✅ 修复 AppImage 和可移植包中帮助文档完全缺失的问题——构建脚本中存在死代码(检查不存在的
share/目录导致复制语句从未执行)(´;ω;`) - ✅ 新增
/proc/self/exe可执行文件相对路径回退搜索,使自包含包中的 help 文档可在任意挂载点被正确找到(#b5c701d) (•̀ᴗ•́)و
🏷️ 元数据处理
- ✅ MP3 文件 ID3v1.1 标签 GBK→UTF-8 编码转换(#8f3b36b),解决仅有 ID3v1 标签时 FFmpeg 将中文解码为 Latin-1 导致的乱码问题 (╥﹏╥) → (^▽^)
🔧 构建系统改进 (Build System) 🔧
🐳 RPM 容器构建
- 📌 Dockerfile.rpm 添加
dbus-devel依赖,修复 libjpeg 版本约束(#82f8692) - 📌 移除 FFmpeg 库版本号约束
>= 4.0,兼容 EL8(#e44796d) - 📌 修复 Docker 构建产物 root 所有权问题,新增
HOST_UID/HOST_GID自动修复机制(#5d875c3) (◕‿◕✿) - 📌 BUILD_GUIDE.md 推荐优先构建 EL8 版本以获得跨 EL 兼容性(#8938aeb)
📚 文档更新
- 📌 新增 FAQ 音频时延调优条目(#5daa332)
- 📌 添加 Docker / Python / Shell / Linyaps 徽章 🏅(#5daa332)
- 📌 同步 README 和快速入门帮助文件(#d7e801d)
📥 下载 (Downloads) 📥
构建产物位于
build/release/~ (っ•̀ω•́)っ
| 格式 | 文件 | 架构 |
|---|---|---|
| 📦 RPM | ter-music-1.11.0-1.el8.x86_64.rpm |
x86_64 (EL8+) |
| 📦 DEB | ter-music_1.11.0_amd64.deb |
amd64 |
| 📦 DEB | ter-music_1.11.0_arm64.deb |
arm64 |
| 🖥️ AppImage | ter-music-1.11.0-x86_64.AppImage |
x86_64 |
| 🗜️ Portable | ter-music-1.11.0-portable-x86_64.tar.gz |
x86_64 |
| 🧊 Linyaps | org.yxzl.ter-music_1.11.0_x86_64.uab |
x86_64 |
💖 致谢 (Acknowledgements) 💖
感谢所有贡献者、测试者和用户的支持与反馈! ヽ(●´∀`●)ノ
Enjoy Ter-Music! 🎵✨ Let's make listening to music in the terminal fun! 🎶 (ノ´ヮ`)ノ*: ・゚
v1.10.0 — 远程播放 & 静态链接支持 ✨
✨ v1.10.0 — 远程播放 & 静态链接支持 (。♥‿♥。)
🌟 主要新功能
🎵 远程音乐播放 — 新增整套远程播放子系统,支持通过 libcurl 浏览和播放远程服务器上的音乐,无需下载到本地 (ノ◕ヮ◕)ノ*:・゚✧
- 🖥️ 支持 SMB / SFTP / FTP / WebDAV / HTTP 五种远程协议
- ⚙️ 设置中添加「远程设备」管理界面,支持多字段表单编辑连接配置
- 🔧 用
smbclient替代 libcurl SMB 以修复 Samba 4.19.5 兼容性,并解决中文路径编码问题 (๑•̀ㅂ•́)و✧ - 📦 远程文件缓存:自动缓存到
/tmp,支持进度拖拽和可靠快进/快退 - 📜 远程 .lrc 歌词加载
- 🔑 SFTP 私钥认证 & 密码加密存储
- 🔄 连接刷新、快速加载到播放列表等快捷操作
- 🚀 启动时可指定远程 URL:
ter-music smb://user@host/share
🔗 FFmpeg 静态链接构建模式 — 新增 --static 构建选项,FFmpeg 完全静态链接进二进制 ✧◝(⁰▿⁰)◜✧
- 🐳
Dockerfile.static: 基于 Rocky Linux 8,从源码编译 FFmpeg 7.1(最小音频配置) - 🐳
Dockerfile.rpm: EL8/9/10 容器化 RPM 构建环境 - 📦
build-rpm.sh: 新增--static/--container/--el-version选项 - 🎯 单个 RPM 包兼容 RHEL EL8/9/10,一包通吃!( •̀ ω •́ )✧
📝 歌词对齐方式 — 设置 → 播放选项中新增左/中/右对齐切换,持久化到 config.json ✨
🔍 调试日志系统 — --debug 模式新增线程安全文件日志,覆盖音轨播放、UI 事件、播放列表操作、远程请求、MPRIS D-Bus 等主要子系统 (◕‿◕)
🧪 测试服务器工具 — tools/start-server.py 交互式脚本,一键启动 SMB/FTP/SFTP/WebDAV/HTTP 测试服务器,支持命令行参数 (`・ω・´)b
🎨 其他改进
- 🖼️ 新增专辑封面显示模式,选中曲目时立即刷新封面
- 🎛️ 封面显示效果优化及快捷键切换
- 🎶 MPRIS/D-Bus 现已默认在静态构建中启用
- 📋 远程连接表单重写为多字段表单,支持字段编辑预填充
- 🔨 构建脚本全面更新,修复缺失的 libswscale-dev 等交叉编译依赖
- 🚫 .gitignore 更新,屏蔽
.claude/及构建临时目录
🐛 修复
| 问题 | 状态 |
|---|---|
| PlayList 光标与底部状态栏重叠 | ✅ 已修復 |
| 加载远程播放列表时音频未停止导致界面冻结 | ✅ 已修復 |
| 远程目录列表中的符号链接误入播放列表 | ✅ 已修復 |
SMB 端口冲突,支持 --force 自动释放端口 |
✅ 已修復 |
| impacket API 变更导致的 SMB 服务启动失败 | ✅ 已修復 |
| wsgidav 4.x 中间件/配置兼容性及依赖缺失 | ✅ 已修復 |
arm64 交叉编译中的 deb 包冲突(--force-overwrite) |
✅ 已修復 |
| linyaps 打包中 libmpg123 运行时依赖缺失 | ✅ 已修復 |
📚 文档
- 📖 完整同步中英文文档,覆盖前述所有新特性
- ⚖️ 所有 README 添加版权声明
- 🐍 新增 conda 环境配置说明(tuna PyPI 镜像)
💝 感谢使用 Ter-Music! 如果你喜欢这个项目,欢迎在 GitHub 上给一颗 ⭐ (人 •͈ᴗ•͈) ♡
v1.9.1 - 2026-05-13
v1.9.1
新增
- 专辑封面显示开关:Settings → Playback Settings 新增"显示专辑图片"选项,可随时关闭专辑封面显示。自动兼容旧配置,升级后缺省为开启。
修复
- 非 JPEG 格式专辑封面提取:修复 WebP、PNG 等非 JPEG 格式的内嵌专辑封面无法显示的问题。改用 FFmpeg 格式探测自动识别实际图片格式,统一转换为 JPEG 显示。
- RPM 包 RHEL 兼容性:将 Fedora 专有包名替换为
pkgconfig()虚拟依赖和自动生成的 soname 依赖,RPM 包现在可在 RHEL(RPM Fusion)和 Fedora 上正常安装。 - 右侧边框线的显示问题:重构右侧边框线的渲染逻辑,使右侧边框线可以正确显示。
文档
- 更新构建指南,补充 libpng、libjpeg、libavfilter 依赖说明。
完整变更
5 commits,共变更 12 个文件:
| 提交 | 说明 |
|---|---|
e8f9419 |
Update docs with libpng/libjpeg and libavfilter dependencies |
9154af9 |
Fix album cover extraction for non-JPEG formats (WebP etc.) |
f6190f4 |
Fix RPM spec for RHEL compatibility |
d3f41cd |
feat: add album cover toggle in Settings and bump to v1.9.1 |
0d63a5d |
fix: correct UI layout width calculation for border alignment |
v1.8.0 - 2026-05-08
v1.8.0 - 2026-05-08
新增功能
- 播放速度控制:新增播放速度调节功能,支持在音频播放时调整播放速度,集成到音频处理、用户界面、设置和配置中,并通过libavfilter实现音频滤镜支持
- 默认循环模式设置:新增
default_loop_mode配置选项,支持在启动时为播放器设置默认的循环模式,包括关闭、单曲循环、列表循环和随机播放四种模式,可在播放设置页面进行配置 - 交叉编译支持:添加完整的CMake交叉编译工具链文件(aarch64-linux-gnu),支持在x86_64架构上构建ARM64/aarch64架构的包,自动设置编译器、链接器和pkg-config路径
- Docker交叉编译容器:新增Docker容器支持用于交叉编译,包含Dockerfile.cross-build和docker-compose.cross.yml,容器内预装ARM64工具链和开发库,避免污染主机系统,支持交互式shell和多种构建脚本
- 构建脚本增强:为所有五个构建脚本(AppImage、DEB、Linyaps UAB、可移植包、RPM)添加
copy_to_release函数,构建完成后自动将结果复制到build/release/目录,方便统一分发
Bug修复
- 启动时播放列表更新问题:修复了启动时播放列表不更新的问题。之前应用仅从临时文件恢复上次的播放列表而不重新扫描目录,导致新增歌曲不显示、已删除歌曲仍显示。现在应用在加载临时播放列表后会重新扫描音乐目录,确保播放列表与实际文件同步
- GCC编译警告:修复了
utf8_str_pad函数中的GCC-Wstringop-overflow警告 - Linyaps BLAS/LAPACK依赖:修复了Linyaps打包时的BLAS运行时依赖问题
- 文档语言切换链接:修复了文档中语言切换链接的问题
架构改进
- 项目目录结构重组:实施标准化目录结构重构
- 新增
data/目录用于应用程序数据文件 - 新增
docs/目录整理文档(构建指南、README、多语言翻译) - 新增
packaging/目录整合打包配置(AUR、Debian) - 新增
resources/目录管理资源文件(图标) - 新增
scripts/目录管理脚本(构建、交叉编译)
- 新增
- 配置文件适配:更新CMakeLists.txt中的安装路径以适配新目录结构,将应用数据从
share/applications/迁移到data/applications/,图标从img/icons/迁移到resources/icons/ - 旧文件清理:清理根目录下的旧构建脚本、打包配置文件和资源文件,这些文件已迁移到新的标准化目录结构中
- 交叉编译配置:更新交叉编译Dockerfile至Debian 13(trixie),配置USTC镜像源以加速包下载,使用DEB822格式配置apt源
文档更新
- 构建文档简化:简化三个README(英文、简体中文、繁体中文)中的构建脚本说明部分,用简洁的引用替代详细说明,添加指向
BUILD_GUIDE.md和scripts/README.md的链接,列出支持的包格式,减少重复和维护负担 - 播放速度控制文档:新增播放速度控制功能的使用文档
- 构建指南更新:更新
BUILD_GUIDE.md,添加详细的交叉编译使用说明,推荐使用容器方式进行交叉编译 - 根目录README清理:删除根目录的
README符号链接和旧文档,统一使用docs/目录下的文档
构建与打包
- 音频依赖更新:添加音频处理相关的依赖项(
WIP状态合并Pull Request后为已完成状态) - libavfilter依赖:在构建脚本和容器配置中添加
libavfilter依赖,为播放速度滤镜提供支持 - 版本号更新:将版本号更新至1.8.0,同步更新Debian打包文件、AUR包信息和应用头文件中的版本号
注意事项
- 由于开发者没有aarch64的环境,无法验证此Release页面提供的aarch64包(是交叉编译所生成的产物)是否可用,因此请在遇到问题时提交ISSUES。
v1.7.1 - 2026-04-24
v1.7.1 - 2026-04-24
Bug 修复
-
修复 desktop 图标点击报错问题
- 修正
.desktop文件的Exec字段格式,将'ter-music -o %f'改为'ter-music %F' - 在
main.c中添加位置参数支持,使程序能够接收命令行文件路径参数
改进效果:
- 直接点击桌面图标时,程序正常启动
- 从文件管理器打开音频文件时,程序自动加载该文件
- 修正
说明: 这是一个小版本修复,主要解决了 Linux 桌面环境下点击应用图标无法正常启动的问题,同时完善了从文件管理器直接打开音频文件的功能支持。
V1.7.0 - 2026-04-24
V1.7.0 - 2026-04-24
新增功能
命令行文件打开支持
- 新增从命令行直接打开单个音频文件的功能
- 新增
load_single_file()函数用于加载单个音频文件 load_playlist()函数现在支持文件路径,自动检测并调用相应加载逻辑- 更新
-o/--open参数,支持指定单个音频文件作为启动参数 - 更新帮助文档,添加单文件打开示例
桌面文件关联支持
- 桌面文件
Exec参数添加%f占位符,支持从文件管理器直接打开音频文件 - 添加
MimeType字段,声明支持的音频格式(MP3、FLAC、OGG、WAV、M4A、APE、OPUS 等)
MPRIS 媒体会话集成(可选)
- 新增可选的 MPRIS 媒体会话集成支持
- 允许系统媒体控制中心(如 GNOME/KDE 的媒体控制)控制播放器
Arch Linux 支持
- 新增 Arch Linux PKGBUILD 支持
- 添加 AUR 安装方法和手动构建步骤说明
- 优化版本号获取逻辑
Debian 打包支持
- 新增 Debian 打包元数据
- 优化 DEB 打包脚本
构建与依赖
依赖库更新
- 更新依赖库版本以支持更多 FFmpeg 版本
构建脚本修复
- 修复
build-deb.sh中 README 文件引用错误(将README_CN.md更正为README_zh-CN_Modern.md) - 更新
build-rpm.sh添加对 Debian/Deepin 系统的支持:- 自动检测系统类型(Debian/RPM)
- 在 Debian 系统上检查 deb 格式的开发库依赖
- 使用
--nodeps选项跳过 rpmbuild 的 RPM 依赖检查 - 根据系统类型显示正确的包管理器安装命令
文档更新
README 文档重构
- 创建
README_zh-CN_Modern.md现代中文文档 - 将原中文文档重命名为
README_zh-CN_Legacy.md(文言文风格) - 在 README.md 中添加其他语言版本链接
- 更新章节编号以保持一致性
安装方式扩展
- 添加 ZPM 包管理器安装说明(支持三种语言版本)
- 添加 Arch Linux PKGBUILD 详细安装和构建指南
项目信息更新
- 将项目主页链接从 Gitee 迁移至 GitHub(包括构建脚本和 README 文件)
- 更新中文 README 中的仓库链接
- 在中英文 README 中添加鸣谢章节,列出贡献者及其贡献
- 更新贡献者列表,补充 @guanzi008 关于 Debian 打包元数据和 MPRIS 媒体会话集成的新贡献说明
贡献者感谢:感谢 @guanzi008、@ZhongHongSoftware 等贡献者的辛勤付出!
v1.6.0 - 2026-04-11
v1.6.0 - 2026-04-11
新增功能
UI/UX 交互增强
- 歌词面板显示开关 - 新增配置选项控制歌词面板的显示/隐藏,用户可根据个人喜好自定义界面布局
- 鼠标交互支持 - 全面添加鼠标操作支持:
- 点击播放列表项选择并播放歌曲
- 点击控制栏按钮(播放/暂停、上一首、下一首等)进行操作
- 点击歌词实现"所见即所得"的跳转定位功能
- 点击菜单栏进行导航操作
构建系统增强
- DEB 包构建支持 - 新增
build-deb.sh脚本,支持将项目打包成标准的 Debian/Ubuntu DEB 包 - Debuginfo 包生成 - 为 RPM 和 DEB 构建脚本添加
--with-debuginfo选项,可选择生成调试信息包 - 源码包生成 - DEB 构建脚本新增源码包生成功能,符合 dpkg-source 规范要求
- 多架构支持 - 为 AppImage、RPM、DEB、可移植包和 Linyaps 构建脚本添加多架构支持,包括架构检测、验证和输出目录结构调整
- 构建环境检查 - 新增
check_environment函数检查项目结构完整性 - 下载工具检测 - 新增
check_download_tool函数自动检测并选择最佳下载工具(wget/curl)
彩蛋功能
- 神秘彩蛋 - 在 UI 中添加了一个神秘彩蛋,等待用户发现
Bug 修复
- UTF-8 文本输入修复 - 修复 UTF-8 编码文本输入提示的问题,改进多字节字符处理
- 设置视图导航修复 - 修复设置视图的导航问题,提升用户体验
- 鼠标事件处理改进 - 重构鼠标点击事件处理逻辑,精确计算各区域位置范围,正确处理滚动偏移和边界情况,提升稳定性
架构改进
- 代码重构 - 提取 UTF-8 退格处理为独立函数
utf8_backspace,消除重复代码 - 菜单提示栏逻辑分离 - 将菜单提示栏点击处理逻辑提取为独立的
handle_menu_hint_bar_click函数 - 路径有效性检查 - 添加
is_valid_path函数进行路径验证 - 枚举常量优化 - 使用枚举常量替代 magic number,提高代码可读性
- ncurses 库查找优化 - 改进 ncurses 库查找逻辑,优先查找 ncursesw 库,未找到时回退到 ncurses 库,提高兼容性
文档更新
- DEB 构建文档 - 在 BUILD_GUIDE.md、README_CN.md 和 README.md 中添加
build-deb.sh脚本的使用说明和构建依赖 - Debuginfo 选项文档 - 添加
--with-debuginfo选项的使用说明 - 文档数量更新 - 更新文档中构建脚本数量描述,反映新增的构建脚本
其他变更
- 日期格式一致性 - 将
LANG=C改为LC_ALL=C,确保日期格式在不同环境下保持一致 - .gitignore 更新 - 添加
.tmp目录到忽略规则
注意:鼠标交互功能在部分提交中虽然标记为"半成品"和"并未完善",但实际已在后续commit中修复和完成,因此用户不必担心代码质量。
[1.5.1] - 2026-04-07
[1.5.1] - 2026-04-07
✨ 新增功能
- 添加不同尺寸的应用图标资源
- 添加桌面文件及图标安装配置
🐛 问题修复
- 修复构建过程中基础系统库打包冲突问题
🔧 构建优化
- 更新基础镜像版本至 org.deepin.base/25.2.2
📚 文档更新
- 更新中文应用名称为"端闱乐部"
- 更新构建指南和README文档
🏠 项目迁移
- 更新项目仓库地址至 GitHub
版本说明:此版本主要完善了应用安装体验,添加了桌面图标支持,修复了构建打包问题,并将项目迁移至 GitHub。