Skip to content
0

Music Together ​

Music Together 是一个在线多人同步听歌平台。部署一个服务端后,朋友可以从浏览器、Android 客户端或 Windows 桌面端进入同一个房间,共享队列、播放状态、歌词和聊天。

项目亮点 ​

  • 实时同步:服务端负责时钟校正、进度上报和漂移修正,让房间内的播放进度保持一致。
  • 多平台客户端:Web 端使用 React + Vite,Android 端使用 Kotlin、Jetpack Compose 和 Media3,Windows 端使用 Electron、React 和 TypeScript。
  • 多音乐来源:支持网易云音乐、QQ 音乐、酷狗音乐、酷狗概念版和 Bilibili。
  • 完整的房间协作:支持密码房间、邀请链接、队列、成员角色、投票、聊天和隐藏房间。
  • 歌词体验:支持逐词、翻译、音译、Ruby 等歌词展示;当一个来源的歌词不完整时,会自动比较其他来源的质量。

工作方式 ​

text
Web / Android / Windows 客户端
              │ HTTP + WebSocket
              ▼
      Music Together 服务端
              │
    房间状态、鉴权、音乐与歌词代理

房间状态、播放时钟和账号配置由服务端统一协调。音乐平台 Cookie 只提交给连接的服务端,Bilibili 以及需要代理的音频也由服务端转发,避免把平台凭据暴露给房间成员。

快速开始 ​

项目需要 Node.js 22 或更高版本,以及 pnpm 10 或更高版本:

bash
git clone https://github.com/LiuYunLingNai/music-together.git
cd music-together
pnpm install --frozen-lockfile
pnpm dev

开发服务默认使用以下地址:

  • Web 客户端:http://localhost:5173
  • 服务端:http://localhost:3001

生产环境可以直接构建并由 Node.js 服务端托管静态文件、API 和 WebSocket:

bash
pnpm build
pnpm start

也可以使用 Docker 部署:

bash
docker run -d --name music-together --restart unless-stopped \
  -p 3001:3001 \
  -v /srv/music-together/data:/app/data \
  -v /srv/music-together/backups:/app/backups \
  ghcr.io/liuyunlingnai/music-together:latest

部署时请持久化 data/ 和 backups/,并根据需要配置 SERVER_ADMIN_IDS、QQ 音乐 API 和 CLIENT_URL。

客户端构建 ​

Android 原生客户端位于 codex/android-native-client 分支,Windows 桌面客户端位于 codex/windows-native-client 分支。两个客户端都连接 main 分支提供的服务端,可以加入同一批房间。

项目地址:github.com/LiuYunLingNai/music-together

项目采用 AGPL-3.0 协议开源,欢迎体验、反馈和贡献代码。

最近更新