音视频桌面应用前端后端【免费下载链接】any-listenA cross-platform private music playback service项目地址https://gitcode.com/gh_mirrors/an/any-listen点击查看免费下载本文围绕官方 READMEdocs/README_zh-tw.md、docs/README_zh.md展开结合仓库源码逐一拆解 any-listen 的六大核心特性、桌面版与网页版两种交付形态并给出网页版完整的部署、配置与环境变量操作指南。读完本文你将掌握 any-listen 的列表类型体系普通/本地/远程/在线、扩展驱动的在线资源与信息匹配机制、WebDAV 数据同步原理以及从零部署网页版服务的完整流程。项目概览一款跨平台的私人音乐播放服务any-listen 是一款正处于积极开发阶段的跨平台私人音乐播放服务目前提供桌面版Desktop与网页版服务Web Server两种形态。所谓私人体现在它的核心设计取向上你既可以播放本机磁盘上的歌曲也可以接入自建的 WebDAV 服务作为远程曲库还可以通过扩展机制按需获取在线歌单与排行榜——数据归属与播放链路始终由你自己掌控。仓库采用 pnpm workspace 管理见 package.json核心业务逻辑集中在packages/shared/app/modules下的若干模块音乐列表、播放器、扩展服务、同步、资源获取等桌面界面位于packages/view-main与packages/view-lyric服务端位于packages/web-server。特性总览六大核心能力官方 README 将项目能力概括为以下六项本文后续章节将逐一展开并结合源码印证特性说明涉及列表/模块本地歌曲播放普通列表、本地列表本地列表localListProviderWebDAV 歌曲播放远程列表接入自建或第三方 WebDAV远程列表、内置 WebDAV 扩展在线匹配歌曲信息封面、歌词等元数据补充扩展的资源能力musicPic/musicLyric在线资源播放歌单、排行榜等在线列表onlineListProvider实验性音效均衡器、混响、变调、声像等音效模块Web Audio API卡拉 OK 歌词与标题栏歌词逐字歌词、桌面歌词窗口、标题栏展示歌词渲染与歌词播放器本地歌曲普通列表与本地列表any-listen 的列表体系以内置列表 用户列表为核心内置列表包括默认列表default、我喜欢love、最近播放last_played与下载download定义在 packages/shared/common/constants.ts 的LIST_IDS常量中用户列表按类型分为local本地、remote远程WebDAV、online在线这一类型判别贯穿于 musicList/index.ts 的同步、排序、元数据解析等逻辑。本地列表local类型直接关联磁盘目录其实现要点集中在 localListProvider.ts路径校验与文件监视创建/更新本地列表时先通过checkPath校验目录存在性verifyLocalListCreate/verifyLocalListUpdate同时为列表目录挂载文件监视器watcherMap目录内文件变化可实时反映到列表中删除列表时同步移除监视器。批量添加与扫描添加文件按每批 100 个处理handleCreateAndAddMusics并支持文件夹扫描——scanMusics.ts 实现了基于 BFS广度优先的目录扫描递归发现子目录中的音乐文件扫描任务可随时取消。元数据解析新增歌曲会通过parseLocalMusicInfosMetadata解析内嵌标签标题、歌手、封面、时长等解析失败的条目会被自动从列表移除保证列表内数据可用性。封面与滚动位置列表封面通过getListsCover缓存cacheListCovers滚动位置按列表 ID 持久化并以 500ms 节流保存saveListScrollInfoThrottle切换列表后可以还原阅读位置。删除文件当本地列表开启允许删除文件meta.enabledRemove时移除歌曲可同步删除磁盘文件多文件删除前会弹出确认框。WebDAV 远程列表把自建网盘变成曲库WebDAV 是 any-listen 实现私人曲库的关键能力。它并非硬编码的网络源而是以内置扩展的形式存在internal.webdav定义见 internalExtension/extensions/webdav/index.ts。该扩展的清单manifest声明了全局设置项enabledCache缓存开关、enabledDebugLog调试日志、servers服务器配置文本输入。列表提供器listProvider表单字段字段类型说明urlinputWebDAV 服务地址usernameinput用户名directoryinput根目录路径includeSubDirboolean是否包含子目录中的歌曲enabledRemoveboolean是否允许从列表中删除远端文件lazzyParseMetaboolean是否懒解析元数据远程列表的底层实现在 listProviderAction.ts音乐条目 ID 生成generateId将扩展ID_源_用户名_地址_文件路径拼接为稳定唯一 ID保证跨设备引用一致。目录遍历getDirFiles递归读取目录子目录深度上限MAX_DEEP 5目录列表缓存 TTL 10 分钟音乐条目缓存 TTL 2 分钟。元数据懒解析WebDAV 文件先以文件名作为歌曲名入库meta.unparsed true随后通过parseMusicInfoMetadata读取文件内嵌标签补齐歌手、专辑、时长、码率等信息。排序支持可按创建时间ctime_asc/desc、修改时间mtime_asc/desc、文件大小size_asc/desc六种方式排序。播放资源资源能力resource声明了musicUrl、musicPic、musicLyric三类见 resourceAction.ts即播放地址、封面、歌词都直接由 WebDAV 提供同时通过parseLyrics解析歌词文件401 认证失败时支持弹窗重新输入密码并校验setPassword。围绕 WebDAV 还有一套多端数据同步机制模块位于packages/shared/app/modules/sync/webdav配置sync.webdav.enable、url、username、password、path后默认值见 defaultSetting.ts可定时将歌单列表syncEnable.list与不感兴趣列表syncEnable.dislike同步到 WebDAV。同步时先建锁lock防止多端并发写冲突再按快照增量合并MergeMode可选择冲突合并策略状态机在idle → waiting → syncing → error间流转sync.ts默认每 180 秒触发一次自动同步任务task.ts。在线匹配歌曲信息封面、歌词的补全机制对于本地歌曲any-listen 支持在线匹配歌曲信息封面、歌词等但这一能力依赖扩展需要到扩展管理中安装提供对应资源能力的扩展。资源获取的公共入口在packages/shared/app/modules/resourcesmusicPic.tsmusicPicSearch搜索封面、getMusicPic获取封面并校验返回的 URL 是否在白名单内allowedUrl。lyric.tslyricSearch搜索歌词、getLyric获取歌词详情、getMusicLyricByExtensionSource按源直接取歌词结果经isValidLyric校验后才生效。musicUrl.tsgetMusicUrl获取可播放地址同样做 URL 白名单校验。这三个模块通过扩展服务extensionService.resourceAction调用扩展暴露的musicPic/musicLyric/musicUrl能力。从调用链看如 remoteListProvider.ts 的parseMusicInfoMetadata与批量解析handleMusicsParseBatch元数据补全以每批 10 首的节奏进行避免瞬间请求过多歌词还支持简体转繁体lyricS2T见 utilService/music.ts。在线资源歌单与排行榜在线资源歌单、排行榜同样需要扩展支持。接入后在线列表online类型可随扩展提供的数据源实时刷新。相关资源接口定义在packages/shared/app/modules/resources歌单songlist.tssonglistSorts歌单分类、songlistTags标签、songlist分页列表、songlistDetail/songlistDetailAll详情与全量拉取。排行榜topSongs.tstopSongs榜单列表、topSongsDate榜单日期、topSongsDetail/topSongsDetailAll榜单详情。歌曲搜索musicSearch.tsmusicSearch分页搜索与findMusic精确匹配按歌名/歌手/专辑/时长。在线列表的同步逻辑位于 onlineListProvider.ts按扩展清单中声明的资源能力过滤可用扩展将用户添加的在线列表入队waitingSyncLists串行拉取详情并与本地已缓存条目做增量对比isUpdated仅在发生变化时覆盖写回并刷新syncTime。项目还内置了定时同步任务runSyncUserListTask见 musicList/index.ts每天随机在 11:00–12:00 之间触发一次远程/在线列表的全量同步保证列表内容时效。实验性音效any-listen 将音效定位为实验性功能基于 Web Audio API 在播放链路中注入效果节点。参数集中定义在 defaultSetting.ts 的player.soundEffect.*配置组卷积混响convolutionfileName脉冲响应文件、mainGain主增益默认 10、sendGain发送增益默认 0脉冲响应文件预置在 view-main/src/assets/medias/filters14 个.wav。双二阶滤波器均衡biquadFilter31Hz、62Hz、125Hz、250Hz、500Hz、1kHz、2kHz、4kHz、8kHz、16kHz 共 10 段默认增益均为 0。声像控制pannerenable默认关、soundR默认 5、speed默认 50。变调器pitchShifterplaybackRate默认 1配合player.preservesPitch保持音调实现变速不变调。渲染层按效果类型拆分为独立组件AudioConvolution、BiquadFilter、PitchShifter、AudioPanner位于 view-main/src/components/common/SoundEffectBtn支持将自定义 EQ 与卷积预设保存/删除到本地存储soundEffect/store/actions.ts。卡拉 OK 歌词与标题栏歌词any-listen 在歌词能力上提供了两处亮点卡拉 OK 歌词逐字歌词歌词数据模型AnyListen.Music.LyricInfo包含逐字时间标签字段awlyric见 types/music.d.ts解析由 lrcTool.ts 完成支持 LRC、逐字AWLRC 等与翻译/音译歌词默认开启player.isPlayAwlrc。渲染层使用any-listen/web/lyric-font-player播放器在桌面歌词窗口view-lyric中以经典classic与多行multiLine两种模式呈现逐字滚动效果。标题栏歌词通过player.isShowTitleLyric标题栏歌词、player.isShowStatusBarLyric状态栏歌词、player.isShowMediaSessionLyric系统媒体会话歌词三个开关控制展示位置均默认关闭可在设置中开启。桌面歌词窗口还支持锁定、置顶、悬停隐藏、锁屏显示、暂停隐藏等行为desktopLyric.*配置组并可从标题栏直接调节字号10–80与透明度6–100。桌面版获取与安装桌面版对应packages/desktop与packages/view-main渲染层以安装包形式发布前往 any-listen 官方仓库的Release页面下载最新版本按平台安装包类型完成安装即可使用。桌面版集成托盘tray、全局快捷键hotKey、系统任务栏缩略图按钮、窗口歌词等桌面专属能力在 Windows 下还保留了旧版布局兼容层winLegacy。网页版部署、配置与环境变量网页版packages/web-server可直接部署到自己的服务器或使用 Docker 部署。完整部署指南见 docs/docker-server_zh-tw.md简体版docs/docker-server_zh.md本节摘录其核心流程。方式一Docker 部署使用官方发布的 Docker 镜像镜像名lyswhut/any-listen-web-server即可启动仓库根目录同时提供了构建镜像所需的 Dockerfile 与 Dockerfile.lts-slim可自行构建。典型的容器启动命令仅为示例请按实际路径调整docker run --volume/home/music:/music --volume/data:/server/data -p 8080:9500 -d test:latest其中/home/music挂载为允许访问的本地音乐目录/data挂载为服务数据目录容器内服务监听 9500 端口并映射到宿主 8080。方式二直接部署要求Node.js 20。从官方 Release 下载最新版本并解压到目标目录参考 lx-music-sync-server 的部署方式。升级流程删除旧版本项目目录下的public与server文件夹将新版本的public与server文件夹上传到项目目录重新启动服务。配置文件先创建配置文件data/config.cjs服务启动时会自动加载该文件见 web-server/src/index.ts 中margeConfig的逻辑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配置文件支持.cjs/.jsNode 模块导出与.jsonJSON 解析两种格式allowPublicDir中的路径会被统一规范化反斜杠转正斜杠、末尾补路径分隔符。服务默认配置端口 9500、绑定 127.0.0.1 等可在 packages/web-server/src/shared/defaultConfig.ts 中查看。环境变量变量名描述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以上环境变量在 web-server/src/index.ts 启动时统一读取并合并到运行配置中其中代理转发逻辑由UPSTREAM_PROXY_HEADER/PROXY_HEADER触发LOGIN_PWD覆盖配置文件中的passwordALLOW_PUBLIC_DIR按逗号拆分后规范化。数据目录、日志目录会自动创建访问被允许目录之外的路径会被 fileSystem/index.ts 的checkAllowPath拦截。源码编译pnpm install pnpm run build:web cd build mkdir data # 建立配置文件 config.cjs node index.cjs根目录 package.json 同时提供build:web构建网页版、build:desktop构建桌面版、dev:web/dev:desktop开发模式等脚本Node 运行时要求22.12.0 || ^20.19.0包管理器为 pnpm。扩展机制一切在线能力的基石在线匹配歌曲信息与在线资源都依赖扩展扩展管理是 any-listen 的开放能力核心。从源码看extensionService生命周期管理loadLocalExtensions扫描扩展目录并读取配置enableExtension/disableExtension/restartExtension/uninstallExtension/updateExtension覆盖启停、重启、卸载与升级内置扩展如internal.webdav不可禁用。两类扩展内置扩展internal随程序分发与在线扩展online从扩展商店安装在线扩展商店的拉取地址可通过extension.onlineExtensionHost配置GitHub 镜像地址通过extension.ghMirrorHosts配置默认内置多个镜像见 defaultSetting.ts。能力模型扩展通过 manifest 声明listProviders列表提供器与resource资源能力如musicUrl/musicPic/musicLyric运行在隔离虚拟机中vm/hostContext并通过extensionApis暴露 command、configuration、musicList、musicUtils、player、request、storage 等宿主 API见 extensionApis当前扩展引擎版本为1.4.0constants.ts。参与贡献欢迎提交 PR。为保证 PR 顺利合并官方 README 给出了如下约定新增功能的 PR建议先创建 Issue 说明以确认该功能是否确实需要修复 bug 的 PR提供修复前后的说明及重现方式其他类型的 PR适当附上说明。贡献步骤克隆本仓库并切换到dev分支进行开发git clone https://gitcode.com/gh_mirrors/an/any-listen cd any-listen git checkout dev提交 PR 至dev分支。开源授权本项目基于Affero 通用公共许可证AGPLv3.0授权并附加以下条款严禁商业用途除非已获得原作者的书面许可完整细则请参阅 LICENSE 文件。在使用或二次分发时请务必遵守上述授权约束尤其是非商用的附加条款。赞分享音视频桌面应用前端后端【免费下载链接】any-listenA cross-platform private music playback service项目地址https://gitcode.com/gh_mirrors/an/any-listen点击查看免费下载相关推荐革新性全方位私人音乐体验any-listen跨平台音乐播放器深度解析革新性全方位私人音乐体验any listen跨平台音乐播放器深度解析 在数字音乐时代我们却面临着前所未有的听音乐自由危机——版权限制、算法操控、数据隐私泄露音视频桌面应用前端后端构建专属私人音乐库Any-Listen跨平台音乐播放方案深度解析构建专属私人音乐库Any Listen跨平台音乐播放方案深度解析 还在为音乐文件散落各处而烦恼吗想要随时随地享受自己收藏的歌曲又不想依赖商业流媒体平台A音视频桌面应用前端后端any-listen跨平台私有音乐播放系统深度体验指南any listen跨平台私有音乐播放系统深度体验指南 在数字音乐时代拥有一个完全自主控制的音乐播放系统已成为众多音乐爱好者的追求。any listen作为一音视频桌面应用前端后端上一篇Flame引擎与Firebase集成实现云存储与实时分析下一篇Gridea多语言内容管理高效维护多版本博客文章创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考