怀念经典,我开发了一个千千静听
TTPlayer — 千千静听复刻版 / TTPlayer
截图 /
**实际运行截图



中文
一款用 Java Swing 编写的桌面音乐播放器,致敬经典 千千静听 (TTPlayer)。支持本地音频播放、同步歌词、多皮肤切换、均衡器、频谱可视化等功能。界面支持中文 / English / 日本語 / 한국어 / Deutsch 切换。
功能特性
- 音频播放 — 基于 JavaCV(FFmpeg)解码 +
javax.sound输出,支持 MP3、FLAC、WAV、OGG 等多种格式,毫秒级 seek - 播放列表 — 添加歌曲、拖放播放、上一首/下一首、播放列表持久化(自动保存/恢复);支持
PlayList.xml七色配置(Color_Text/Hilight/Bkgnd/Number/Duration/Select/Bkgnd2),序号、歌名、时长分色分段显示,隔行背景,歌名过长自动省略号;左右列表可拖动分割条调节宽度 - 同步歌词 — 独立歌词窗口,完全移植 c_ttplayer 渲染模型(当前行恒居中、距中心渐隐、卡拉OK 逐字高亮、行距随窗口自适应);拖动歌词预览中心线与时间徽标,释放即 seek 到目标行;支持
Lyric.xml的TextColor/HilightColor/BkgndColor/HilightWordColor配色 - 在线搜词 — 对接在线歌词接口,自动搜索并保存歌词到歌曲同目录;antd 风格搜索对话框(列表、专辑列、双击下载)
- 皮肤系统 — 完整的 .skn 皮肤加载,内置 60+ 款经典皮肤;拖入 .skn 文件可直接换肤;控件支持
align组合对齐(top+left/center+middle/fill拉伸等),窗口缩放时控件随尺寸重定位 - 均衡器 — 10 段图形均衡器(biquad),启用开关 + 杜比环绕 + 13 种预设分类(流行/摇滚/金属/电子…右键菜单选择),参数持久化下次恢复
- 频谱可视化 — 移植自 c_ttplayer 的 8 种频谱模式:柱状 / 波形 / 镜像柱 / 粒子 / 折线 / 面积 / 雷达 / LED 点阵,实时 FFT(RDFT),30fps 刷新
- 迷你模式 — 紧凑的迷你播放器,常驻屏幕右上角,可自定义皮肤(
mini_window配置) - 多语言 — 中文 / English / 日本語 / 한국어 / Deutsch 界面切换(主菜单 / 选项 / 托盘菜单 → 语言)
- 自定义控件 — 皮肤驱动的按钮、滑块、滚动条、LED 数字显示等;歌词搜索 / 皮肤选择对话框均为 antd(Ant Design)风格
技术栈
| 组件 | 技术 |
|---|---|
| 语言 | Java 25 |
| UI | Swing(无边框窗口、半透明、自定义控件) |
| 音频解码 | JavaCV 1.5.9 + FFmpeg 6.0(按平台引入原生库) |
| 音频输出 | javax.sound (SourceDataLine) |
| 歌词搜索 | OkHttp 4.12 + 在线歌词 API |
| 元数据 | JavaCV (FFmpeg) |
| 国际化 | java.util.ResourceBundle(messages.properties + zh_CN / ja / ko / de) |
| 构建 | Maven (maven-shade-plugin 打包含全部依赖的 fat JAR) |
快速开始
环境要求
- JDK 25+
- Maven
构建与运行
# 克隆 / Clone
git clone https://github.com/tomj2ee/ttplayer.git
cd ttplayer
# 打包(自动按当前机器选择 FFmpeg 原生库,打成含全部依赖的可执行 fat jar)
mvn clean package
# 运行(三种方式任选)
java -jar target/ttplayer.jar
./ttplayer.sh # macOS,带 Dock 图标
ttplayer.bat # Windows
打包产物:target/ttplayer.jar(包含全部依赖和当前平台的 FFmpeg 原生库,可直接 java -jar 运行)。
按平台打包
FFmpeg 原生库按平台分别引入,体积比 javacv-platform(含全部平台)小得多。pom.xml 里已配置
macosx-x86_64、macosx-arm64、windows-x86_64、linux-x86_64、linux-arm64 多个 profile,
构建时按当前机器自动激活。
一次打包所有平台(每个平台一个独立 fat jar):
mvn clean package -Pall
# 产物 / Output: target/ttplayer-1.0.0-macosx-x86_64.jar
# target/ttplayer-1.0.0-macosx-arm64.jar
# target/ttplayer-1.0.0-windows-x86_64.jar
# target/ttplayer-1.0.0-linux-x86_64.jar
# target/ttplayer-1.0.0-linux-arm64.jar
只打包单个平台,用 -Djavacpp.platform=xxx 指定:
# Intel Mac
mvn clean package -Djavacpp.platform=macosx-x86_64
# Apple Silicon Mac
mvn clean package -Djavacpp.platform=macosx-arm64
# Windows x64 / Linux x64 / Linux ARM64
mvn clean package -Djavacpp.platform=windows-x86_64
mvn clean package -Djavacpp.platform=linux-x86_64
mvn clean package -Djavacpp.platform=linux-arm64
开发模式
直接在 IDE(IntelliJ IDEA)中打开项目,运行 org.ttplayer.Main 即可。
皮肤(src/main/resources/skin/*.skn)和图标会一起打进 jar,运行时从 classpath 读取;
打包后无需在 jar 外保留皮肤目录。
使用说明
- 添加歌曲 — 点击播放列表工具栏"添加",选择文件或文件夹;也可直接从 Finder/资源管理器拖入歌曲播放
- 切换皮肤 — 主菜单 → 皮肤;或直接拖入
.skn文件 - 歌词 — 点击歌词按钮打开歌词窗口;右键搜索在线歌词;拖动歌词行可预览并 seek(松手跳到目标时间)
- 播放列表 — 拖动左右列表之间的分隔条调节歌曲/列表显示宽度;悬停高亮
- 迷你模式 — 在播放列表工具栏中切换到迷你模式
- 均衡器 — 点击均衡器按钮;右键菜单可启用均衡器 / 杜比环绕 / 选择 13 种预设分类,参数自动保存
- 频谱 — 点击频谱区域可在 8 种模式(柱状/波形/镜像/粒子/折线/面积/雷达/LED)间循环切换
- 语言 — 主菜单或托盘菜单 → 语言 → 中文 / English / 日本語 / 한국어 / Deutsch
项目结构
src/main/java/org/ttplayer/
├── Main.java # 入口(系统属性 → 启动 TTPlayerApplication)
├── TTPlayerApplication.java # 应用入口门面(瘦身后)
├── app/ # 应用协调层(从 TTPlayerApplication 拆分)
│ ├── WindowHub.java # 核心状态与门面(皮肤/引擎/窗口引用)
│ ├── WindowAssembler.java # 窗口创建、关系绑定、图标、配置保存、按钮
│ ├── WindowLifecycle.java # 显示恢复/迷你模式/换肤换语言重建/托盘联动
│ ├── TrayController.java # 系统托盘
│ ├── FileDropController.java # 文件拖放(音频导入 / .skn 换肤)
│ ├── PlayerEventListener.java # 播放器事件桥接(界面/歌词/状态持久化)
│ └── SongImportSupport.java # 打开文件对话框导入歌曲(复用)
├── engine/
│ ├── PlayerEngine.java # 音频播放引擎(JavaCV FFmpeg + javax.sound)
│ ├── Equalizer.java # 10 段 biquad 均衡器 + 杜比环绕
│ └── EqualizerConfig.java # 均衡器参数持久化
├── model/
│ ├── Song.java # 歌曲模型
│ ├── Playlist.java # 播放列表
│ ├── PlaylistManager.java # 播放列表管理器
│ └── PlaylistConfig.java # 播放列表持久化(XML)
├── skin/
│ └── TtSkin.java # 皮肤加载与解析(.skn / ZIP / 目录)
├── ui/
│ ├── SkinWindow.java # 皮肤窗口基类(九宫格缩放、BMP 镂空、align 对齐)
│ ├── PlayerWindow.java # 主播放器窗口(含频谱)
│ ├── LyricWindow.java # 歌词窗口
│ ├── LyricRenderer.java # 歌词渲染(移植 c_ttplayer:恒居中 + 卡拉OK + 拖动 seek)
│ ├── EqualizerWindow.java # 均衡器窗口(右键菜单 / 预设分类)
│ ├── PlaylistWindow.java # 播放列表窗口(分隔条 / 七色列表)
│ ├── MiniWindow.java # 迷你播放器窗口(皮肤驱动)
│ ├── DesktopLyricWindow.java # 桌面歌词
│ ├── SkinSelectDialog.java # 皮肤选择对话框(antd 按钮)
│ ├── LyricSearchDialog.java # 在线歌词搜索对话框(antd 风格)
│ ├── SongDownloadDialog.java # 歌曲搜索/下载对话框
│ └── controls/ # 皮肤驱动的自定义控件
│ ├── TtButton / TtHSlider / TtVSlider / TtTrackBar
│ ├── TtVolumeBar / TtScrollbar / TtToolbar / TtLed
│ ├── SkinScrollBarUI / TtToolbar
│ └── VirtualList.java # 虚拟列表(Scrollable、分段颜色、省略号)
├── audio/
│ ├── TtRdft.java # 实数 FFT(等价 FFmpeg AV_TX_FLOAT_RDFT)
│ ├── TtVisualizer.java # 频谱可视化(8 种模式,移植自 c_ttplayer)
├── util/
│ ├── Messages.java # 国际化消息(中英资源包)
│ ├── SnapUtils.java # 窗口边缘吸附(内部拖拽语义识别)
│ ├── ColorUtils / FontUtils / UIUtils / WindowConfig
│ └── WindowLayoutUtils # 窗口布局与图标的工具
└── lyrics/
├── LRCParser.java / LRCLine.java / LyricChar.java / SongResult.java
├── LyricSearchService.java # 在线歌词搜索
└── LyricAutoDownloader.java # 自动搜索下载歌词(可复用)
资源文件(src/main/resources/):
skin/*.skn— 内置皮肤ico/*.png— 图标messages.properties— 英文文案(默认)messages_zh_CN.properties— 中文文案messages_ja.properties— 日本語messages_ko.properties— 한국어messages_de.properties— Deutsch
皮肤
项目内置 60+ 款经典 TTPlayer 皮肤,位于 src/main/resources/skin/ 目录。皮肤文件为 .skn 格式(ZIP 压缩包或目录),包含:
Skin.xml— 窗口布局与控件定义- BMP 图片 — 按钮、滑块、背景等所有 UI 元素
Player.xml、Equalizer.xml、PlayList.xml等子窗口配置
License
本项目仅供学习和个人使用。皮肤资源版权归原作者所有。
「获取方式」:后台回复 ttplayer


浙公网安备 33010602011771号