any-listen 项目全解:跨平台私人音乐播放服务的桌面版与网页版部署指南

发布时间:2026/10/14 15:14:26
any-listen 项目全解:跨平台私人音乐播放服务的桌面版与网页版部署指南 音视频桌面应用前端后端【免费下载链接】any-listenA cross-platform private music playback service项目地址https://gitcode.com/gh_mirrors/an/any-listen点击查看免费下载导读any-listen 是一个正在积极开发中的跨平台私人音乐播放服务当前提供桌面版Desktop与网页版服务Web Service两种形态。本文将基于仓库 README.md 的官方说明结合源码带你完整理解它的核心特性本地音乐、WebDAV 远程列表、扩展驱动的在线能力、实验性音效与歌词能力并给出可直接落地的网页版部署方案Docker / 直接部署 / 源码编译、配置项与环境变量详解以及贡献代码与许可证边界。读完本文你将能独立部署一套属于自己的私人音乐播放服务并掌握其底层配置加载与启动原理。项目定位与技术形态官方 README 将项目定位为A cross-platform private music playback service一款跨平台的私人音乐播放服务核心关键词是“私人”——它强调数据自主可控而不是依赖任何公网音乐平台。从仓库目录结构可以清晰看出其双形态架构见 pnpm-workspace.yaml 与根 package.json目录作用packages/desktop桌面版主进程代码Electron 应用逻辑、模块与配置packages/view-main主窗口渲染层Svelte 编写的完整播放器 UIpackages/view-lyric歌词窗口渲染层经典 / 多行歌词视图packages/web-server网页版服务端Koa 应用、IPC、中间件packages/shared桌面端与网页端共享的模块化代码app / common / nodejs / types 等网页版与桌面版共享同一套any-listen/*包app、common、i18n、nodejs、theme、web这从 packages/web-server/package.json 的依赖声明中可以得到印证也是“同一服务、两种载体”这一设计的关键。核心特性与其源码印证README 官方列出的六大特性都可以在源码中找到对应的实现模块下面逐一展开。1. 本地歌曲普通列表与本地列表“添加并播放本地歌曲”是最基础的能力覆盖**普通播放列表standard playlists与本地列表local lists**两种组织方式。从 packages/shared/app/modules/musicList 与 packages/shared/app/modules/musicList/localListProvider.ts 的结构看本地列表由独立的 Provider 负责管理与普通列表在数据层分离便于后续扩展其他来源。2. WebDAV 远程列表“添加并播放存储于 WebDAV 的歌曲远程列表”意味着你可以把自己的网盘/自建 WebDAV 服务作为曲库。源码中 packages/shared/app/modules/sync/webdav 提供了完整的 WebDAV 客户端webdav.ts、sync.ts、task.ts而 packages/shared/common/defaultSetting.ts 中sync.webdav.*系列默认项url、username、password、path、syncEnable.list、syncEnable.dislike等说明 WebDAV 不仅用于远程列表还承担歌单与不喜欢列表的同步能力。3. 扩展驱动的在线能力README 明确指出**在线匹配歌曲信息封面、歌词等与添加并播放在线资源歌单、排行榜等**都需要“到扩展管理安装对应扩展”。这说明在线能力不是内置写死的而是通过扩展系统按需加载——这也是“私人服务”保持中立的体现。源码侧的扩展体系非常完整packages/shared/app/modules/extension 定义了扩展的状态、事件、日志与在线/远程列表 Providerpackages/shared/extension-preload 为扩展提供沙箱化 APIrequest、storage、musicList、player 等扩展商店存在 GitHub 镜像需求因此 packages/shared/common/defaultSetting.ts 中预置了extension.ghMirrorHosts默认镜像列表网页版亦通过EXTENSION_GH_MIRROR_HOSTS环境变量或extension.ghMirrorHosts配置项覆盖。4. 实验性音效“实验性音效”在 packages/shared/common/defaultSetting.ts 的player.soundEffect.*配置中有完整体现包含卷积混响convolution、多频段双二阶滤波器biquadFilter覆盖 31Hz 到 16kHz 共 10 个频段、**声像/环绕panner与音高变速pitchShifter**等参数。同时 packages/view-main/src/assets/medias/filters 下提供了 14 个.wav滤波器素材进一步印证了音效链路的真实存在。因其标注为“实验性”使用时应留意效果与稳定性。5. 卡拉 OK 歌词与标题栏歌词歌词能力是播放器体验的核心之一包含卡拉 OK 歌词逐字染色与标题栏歌词。从 packages/view-lyric 包可看到独立的歌词窗口经典classicLyric与多行multiLineLyric两种视图而 packages/shared/common/defaultSetting.ts 中desktopLyric.mode: classic定义默认歌词窗口形态desktopLyric.classic.*与desktopLyric.multiLine.*分别承载两套独立的样式参数字号、颜色、透明度、对齐、行距等player.isShowTitleLyric、player.isShowStatusBarLyric对应标题栏/状态栏歌词开关。桌面版安装与本地开发安装按官方说明桌面版直接前往 Release 页面下载最新版本安装即可桌面版仓库与主仓库分离管理。从源码运行与构建仓库以 pnpm workspace 管理多包packages/*根 package.json 提供了完整的开发脚本命令作用pnpm dev:desktop启动桌面版开发模式pnpm dev:web启动网页版开发模式pnpm build:desktop构建桌面版Windows 安装包pnpm build:dir构建桌面版目录形态产物pnpm build:web构建网页版产物pnpm build:theme构建主题资源同时根 package.json 的engines声明了Node.js 版本要求22.12.0 || ^20.19.0并锁定pnpm10.34.5这是从源码构建前需要满足的运行时前提。桌面版主进程源码位于 packages/desktop/src其中 packages/desktop/src/modules 集中了音乐、播放器、音乐列表、代理服务器、同步、主题、托盘、热键等模块而view-main与view-lyric两个窗口的渲染逻辑则由 packages/view-main 与 packages/view-lyric 承载。网页版三种部署方式README 指出网页版“可以直接部署到服务器或使用 Docker 部署”完整的部署流程、环境变量与源码编译详见官方 部署指南英文版见 docs/docker-server.md。以下是提炼后的完整实操。[!TIP] 直接部署要求Node.js 20与仓库engines声明保持一致。方式一Docker 部署镜像发布在 Docker Hublyswhut/any-listen-web-server。官方示例命令如下注意仅为示例不可直接使用需替换为你的实际镜像名与挂载路径docker run --volume/home/music:/music --volume/data:/server/data -p 8080:9500 -d test:latest结合仓库根目录的 Dockerfile 可以还原该镜像的关键细节多阶段构建builder阶段安装nodejs、npm、git、g、make等依赖并执行pnpm build:webfinal阶段只保留nodejs、icu-data-full修复new TextDecoder(latin1)报错与tzdata镜像内默认WORKDIR /server启动命令为node index.cjs以非 root 用户anylistenuid 1001运行数据目录/server/data预创建并授权默认环境变量DATA_PATH/server/data、NODE_ENVproduction、PORT9500、BIND_IP0.0.0.0。因此示例命令中--volume/home/music:/music是向容器暴露可供播放的本地音乐目录--volume/data:/server/data是持久化服务数据登录信息、客户端记录等-p 8080:9500将容器 9500 端口映射到宿主 8080。方式二直接部署下载发行包下载最新版本并解压到目标目录创建配置文件data/config.cjs详见下一节启动服务。升级方式官方步骤删除旧版本项目目录下的public与server文件夹将新版本的public与server文件夹上传到项目目录重启服务。官方部署方式可参考lx-music-sync-server的部署经验配置文件说明以本文下方为准。方式三源码编译pnpm install pnpm run build:web cd build mkdir data # 创建配置文件 config.cjs node index.cjs产物输出到build目录index.cjs即服务入口。首次启动时服务端会自动准备 native 依赖见 packages/web-server/src/envPrepare.ts若native目录缺失会从发布渠道下载对应平台的本地库压缩包并解压。配置文件data/config.cjs详解官方给出了完整的配置示例所有可选字段均以注释形式呈现直接复制即可用const config { // port: 9500, // 绑定端口 // bindIp: 127.0.0.1, // 绑定 IP // httpLog: true, // 是否启用 HTTP 请求日志 // cors.enabled: false, // 是否启用跨域 // cors.whitelist: [ // 允许跨域的域名空数组表示允许所有域名 // // www.xxx.com, // ], // upstreamProxy.enabled: false, // 是否使用代理转发请求 // upstreamProxy.header: , // 代理转发请求头如 x-real-ip // extension.ghMirrorHosts: [], // 扩展商店 GitHub 镜像地址 // httpProxy: , // 代理服务器地址例子 127.0.0.1:2080 // 允许访问的本地目录 // allowPublicDir: [G:, E:\\music], // Windows 示例 // allowPublicDir: [/music], // Linux 示例 password: 123456a, // 登录密码 } module.exports config从源码看这份示例与 packages/web-server/src/shared/defaultConfig.ts 中定义的默认值完全一致默认端口9500、默认绑定127.0.0.1、默认启用 HTTP 请求日志、默认关闭 CORS。类型定义见 packages/web-server/src/types/config.d.ts其中allowPublicDir允许客户端选择的系统路径范围即网页版文件选择器可访问的本地目录白名单password服务登录密码为空则无需登录upstreamProxy.*是否使用代理转发请求到本服务器以及对应的转发请求头如x-real-ip可用于反代场景获取真实客户端 IPextension.ghMirrorHosts扩展商店的 GitHub 镜像地址列表默认继承客户端默认设置中的镜像列表见 packages/shared/common/defaultSetting.ts 中extension.ghMirrorHosts。环境变量官方环境变量表来自 部署指南变量名描述PORT绑定端口默认9500BIND_IP绑定 IP默认127.0.0.1设为0.0.0.0接受所有 IPv4 请求设为::接受所有 IP 请求UPSTREAM_PROXY_HEADER代理转发请求头如x-real-ip设置后自动启用代理ALLOW_PUBLIC_DIR允许访问的本地目录多个目录用英文逗号分隔DATA_PATH数据存储路径默认./dataLOGIN_PWD登录密码CONFIG_PATH配置文件路径默认./data/config.jsLOG_PATH日志存储路径默认./data/logsEXTENSION_GH_MIRROR_HOSTS扩展商店 GitHub 镜像地址多个地址用英文逗号分隔HTTP_PROXY代理服务器例子127.0.0.1:2080源码中 packages/web-server/src/shared/constants.ts 的ENV_PARAMS常量表与上表一一对应确认这些环境变量均由服务端显式支持解析。配置加载与启动原理从 packages/web-server/src/index.ts 的启动流程可以还原出网页版服务端的完整工作顺序读取环境变量收集ENV_PARAMS中已设置的变量并打印初始化全局状态确定dataPath默认../data与logPath默认dataPath/logs挂载全局global.anylisten加载配置文件先读取{dataPath}/config.cjs若存在再读取CONFIG_PATH指定的配置文件若存在配置文件中以env.前缀开头的键还可回填环境变量且已设置的环境变量优先级更高见mergeConfigFileEnv与margeConfig的叠加逻辑环境变量覆盖LOGIN_PWD覆盖密码、ALLOW_PUBLIC_DIR按逗号切分覆盖目录白名单、HTTP_PROXY覆盖代理地址allowPublicDir会被规范化为统一的分隔符结尾路径extension.ghMirrorHosts会经过镜像地址格式化处理HTTP 服务器启动基于 Koa 构建应用见 packages/web-server/src/server.ts中间件链依次为reqInit→ HTTP 日志可配置开关→ CORS可配置开关→ 流式请求体 → 静态文件 → 路由随后创建原生http.createServer并listen(port, bindIP)监听upgrade事件承载 WebSocketIPC 通信使用优雅退出收到SIGINT/SIGTERM时销毁 WebSocket 连接并关闭 HTTP 服务器2 秒超时后强制退出。网页版的技术栈可以从 packages/web-server/package.json 确认Koa 3HTTP 框架、wsWebSocket、better-sqlite3本地数据存储、jsonwebtoken登录令牌、log4js日志、message2call进程/模块间消息调用。数据存储与登录机制服务数据默认存放于DATA_PATH默认./data由 packages/web-server/src/shared/data.ts 管理核心文件有两个serverInfo.json服务端身份信息包含随机生成的serverIdUUID、由 128 字节随机数经 SHA-512 哈希得到的tokenSecret用于签发登录令牌以及version字段clientInfo.json已登录客户端设备记录clientId、timestamp、lastActive、userAgent、ip用于多端管理与最近活跃统计。密码由配置项password提供packages/web-server/src/shared/data.ts 的getLoginPassword读取为空时服务不要求登录。贡献代码README 欢迎 PR并明确了合并要求对于添加新功能的 PR建议先创建 Issue 进行说明确认该功能是否确实需要对于修复 bug的 PR请提供修复前后的说明及重现方式对于其他类型的 PR则适当附上说明。贡献步骤克隆本仓库代码并切换至dev分支进行开发提交 PR 至dev分支。许可证与使用边界本项目基于Affero 通用公共许可证AGPLv3.0授权并附加以下条款见 README.md 与 LICENSE严禁商业用途除非已获得原作者的书面许可完整细则请参阅 LICENSE 文件。这一双重限制决定了它的定位是个人/自用级别的私人服务任何商业化的二次分发或托管运营都需先取得授权。小结any-listen 以“跨平台私人音乐播放服务”为核心用桌面版与网页版两种形态覆盖了同一套能力本地/WebDAV 曲库、扩展驱动的在线信息与资源、实验性音效以及丰富的歌词呈现。网页版提供了 Docker、发行包、源码编译三条部署路径配合config.cjs与十余个环境变量即可完成从端口、目录白名单到反代与代理的完整配置。对希望自建私有音乐服务的开发者来说这是一套结构清晰、模块化程度高且易于二次开发的参考实现。赞分享音视频桌面应用前端后端【免费下载链接】any-listenA cross-platform private music playback service项目地址https://gitcode.com/gh_mirrors/an/any-listen点击查看免费下载相关推荐CANN/metadef Tensor SetData函数SetDataa nameZH CN_TOPIC_0000001264921058 /a 函数功能a namesection18697032人工智能CANNAscendany-listen私有音乐库跨平台音乐播放服务的终极搭建指南any listen私有音乐库跨平台音乐播放服务的终极搭建指南 厌倦了被各大音乐平台算法支配的日子想要一个完全属于自己、不受干扰的音乐空间any list音视频桌面应用前端后端any-listen终极跨平台私人音乐播放器完整指南any listen终极跨平台私人音乐播放器完整指南 还在为商业音乐平台的种种限制而烦恼吗any listen将为你带来一场音乐体验的彻底革命这款跨平台私音视频桌面应用前端后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询