play-music

🎵 本地音乐全控播放器

OpenClaw官方生态的本地音乐播放技能,基于pygame实现播放/暂停/恢复/停止全控制,零网络外连、权限最小化设计。

收藏
1.6k
安装
724
版本
127.0.0
CLS 安全扫描中
预计需要 3 分钟...

使用说明

核心用法

Play Music Skill 是一个专为本地音乐播放设计的控制型技能,采用单一入口点架构。用户通过 ./play-music 命令即可完成全部操作,包括播放默认曲目、指定文件播放、暂停/恢复/停止控制、状态查询及服务器管理。技能内置客户端-服务器分离架构,后台 music-server.py 负责实际音频解码与播放控制,前台脚本作为统一交互界面。

使用流程极为简洁:将音乐文件放入 ./music 目录(或通过 MUSIC_DIR 环境变量自定义),安装 pygame 依赖后即可通过命令行操控。服务器采用懒加载设计,播放时自动启动、停止后自动关闭,兼顾响应速度与系统资源占用。

显著优点

架构清晰:单一入口点消除脚本选择困惑,命令白名单机制确保输入安全。客户端-服务器分离使核心播放逻辑与交互层解耦,便于维护与扩展。

控制完备:相比简易播放工具,完整支持 pause/resume/stop 三态控制,满足语音助手场景下的精细化操控需求。pygame 混音器提供跨平台高质量音频输出。

资源友好:服务器非常驻内存,按需启停的设计对边缘设备与长时运行的 AI 助手系统尤为友好。锁文件机制避免多实例冲突。

零网络依赖:纯本地运行,无外部 API 调用、无云端服务依赖,隐私敏感场景下具备天然优势。

潜在缺点与局限性

格式支持受限:依赖 pygame 的音频解码能力,主要覆盖 MP3、OGG、WAV 等常见格式,对 FLAC、AAC、无损压缩格式或流媒体协议(HTTP Live Streaming)缺乏原生支持。

无播放列表管理:当前版本仅支持单首曲目播放,无队列、随机播放、循环模式等高级功能,复杂场景需用户自行编排调用逻辑。

端口硬编码:控制端口固定为 12346,多用户或多实例部署时可能产生冲突,虽提供手动清理命令但缺乏动态端口分配机制。

元数据缺失:无 ID3 标签读取、专辑封面展示、歌词同步等增强功能,纯工具属性定位。

适合的目标群体

  • AI 助手开发者:需为 OpenClaw 等框架集成音乐控制能力的场景
  • 本地隐私优先用户:拒绝云端音乐服务、追求数据完全本地化的用户
  • 自动化脚本编写者:需要将音乐播放纳入工作流或定时任务的效率用户
  • 教育/演示场景:需要可控、可中断音频播放的教学或展示环境

使用风险

依赖项风险:pygame 虽为主流库,但跨平台音频驱动兼容性存在差异,Linux 环境可能需额外配置 ALSA/PulseAudio。

并发冲突:固定端口与锁文件机制在容器化或快速重启场景下可能出现状态残留,需手动执行 server-stoppkill 清理。

路径遍历:虽使用 pathlib 进行路径拼接,但若 MUSIC_DIR 被恶意设置为系统敏感目录(如 /etc),配合社会工程学仍可能引发信息泄露,建议配合沙箱使用。

安全解读

核心用法

Play Music Skill 是一个基于 Python 的本地音乐播放器,采用简洁的客户端-服务器架构实现完整的播放控制。用户通过单一入口点 ./play-music 执行所有操作,包括播放默认歌曲、指定文件名播放、暂停、继续、停止以及状态查询。

主要特性:

  • 单一入口设计:所有功能通过 ./play-music 命令完成,无脚本混淆
  • 完整播放控制:支持 play、pause、resume、stop、status 全生命周期管理
  • 智能资源管理:服务器按需自动启动,音乐停止后自动关闭,节省系统资源
  • 跨平台兼容:基于 pygame 和 Python 标准库,支持 macOS/Windows/Linux

技术架构:

  • play-music:统一客户端入口,处理命令解析和服务器通信
  • music-server.py:后台播放服务器,基于 pygame mixer 实现高质量音频
  • 本地 TCP Socket(127.0.0.1:12346)用于进程间 JSON 通信

显著优点

1. 零网络攻击面:服务器仅绑定本地回环地址,外部网络完全无法访问
2. 隐私零收集:不采集任何个人身份信息、行为数据或播放习惯,GDPR/CCPA 完全合规

3. 依赖安全可靠:核心依赖 pygame 为成熟多媒体库,其余均为 Python 标准库,无第三方网络依赖

4. 资源高效:自动生命周期管理,避免长期后台驻留

5. 配置灵活:支持 MUSIC_DIR、DEFAULT_SONG 等环境变量自定义

潜在缺点与局限性

1. 路径遍历风险song_name 参数未严格过滤 ../ 等遍历字符,可能访问音乐目录外文件(中等严重程度)
2. 固定端口冲突:硬编码 12346 端口,可能与其他应用冲突

3. Lock 文件权限过宽:设置为 0o666 全局可读写,同一系统其他用户可干扰服务状态

4. 无身份验证:本地进程可直接连接 socket,多用户环境下缺乏隔离

5. 输入验证有限:Socket 接收缓冲区固定 1024 字节,缺乏严格载荷验证

适合人群

  • 本地音乐爱好者:希望在终端环境快速控制音乐播放的开发者和技术用户
  • 隐私敏感用户:拒绝云端服务、追求完全本地化的音频播放方案
  • 自动化场景:需要脚本化音乐控制的智能家居或工作流自动化用户
  • 资源受限环境:希望避免重型音乐播放器后台驻留的轻量级需求用户

常规风险

| 风险类型 | 等级 | 说明 |
|---------|------|------|
| 路径遍历 | 中 | 恶意构造的 song_name 可能读取非音乐目录文件 |
| 本地权限提升 | 低 | 过宽的 lock 文件权限允许多用户干扰服务状态 |
| 端口占用拒绝服务 | 低 | 固定端口被占用时服务启动失败 |
| 残留资源 | 极低 | 异常退出时 lock 文件可能残留需手动清理 |

总体评估:该 Skill 安全风险可控,建议修复路径遍历验证后生产使用,特别适合注重隐私和本地控制的场景。

play-music 内容

手动下载zip · 6.9 kB
music-server.pytext/plain
请选择文件