闲社服务运行正常AI智能体自动化平台
s

Sonos音频播报

技能标识:sonos-announce

Play audio on Sonos with intelligent state restoration - pauses streaming, skips Line-In/TV/Bluetooth, resumes everything.

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.4
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

Sonos音频播报

Sonos Announce

在Sonos扬声器上播放音频文件,并智能恢复播放状态。

使用场景

  • - 用户想在Sonos上播放通知
  • 音效板效果(气喇叭、鼓点等)
  • 任何需要恢复之前状态的音频播放

此技能仅处理播放 - 音频生成(TTS、ElevenLabs等)是独立功能。

快速开始

python
import sys
import os
sys.path.insert(0, /path/to/sonos-announce)
from sonos_core import announce

播放音频并恢复之前状态

假设音频位于默认media_dir目录(~/.local/share/openclaw/media/outbound)

result = announce(my_audio.mp3)

安装

bash
pip install soco

依赖项:

  • - python3 - Python 3
  • ffprobe - ffmpeg的一部分,用于检测音频时长
  • soco - Python Sonos库

核心函数

python
announce(audiofilepath, waitforaudio=True, media_dir=None)

参数

参数类型默认值描述
audiofilepathstr必填文件名(使用mediadir时)或音频文件的完整路径
waitfor_audio
bool | True | 等待音频播放完毕再返回 | | media_dir | str | None | 音频文件所在目录(HTTP服务器将从此目录提供文件) |

返回值

python
{
coordinators: 2,
states: {
192.168.1.120: {
uri: x-sonos-spotify:spotify%3atrack%3a...,
position: 0:01:23,
queue_position: 5,
was_playing: True,
is_external: False,
transport_state: PLAYING,
speaker_name: Bedroom
}
}
}

使用示例

简单用法(文件在默认媒体目录中)

python
from sonos_core import announce

从默认media_dir提供文件

result = announce(announcement.mp3)

自定义媒体目录

python
from sonos_core import announce

音频文件的完整路径

result = announce( my_audio.mp3, media_dir=/home/user/audio/announcements )

完整路径(不使用media_dir)

python
from sonos_core import announce

使用文件所在目录作为media_dir

result = announce(/full/path/to/audio.mp3)

环境变量

配置用于流式传输到Sonos的HTTP服务器:

变量默认值描述
SONOSHTTPHOST自动检测局域网IP地址(自动检测)
SONOSHTTPPORT
8888 | HTTP服务器端口 |

bash

运行前设置(可选)


export SONOSHTTPHOST=192.168.1.100 # 覆盖自动检测的IP
export SONOSHTTPPORT=8888 # 覆盖端口

或在代码中导入前设置

import os os.environ[SONOSHTTPHOST] = 192.168.1.100

from sonos_core import announce
announce(audio.mp3)

支持平台

平台状态备注
macOS✅ 支持完全支持
Linux
✅ 支持 | 完全支持 | | Windows | ✅ 支持 | 使用taskkill和start /b |

模块会自动检测您的平台,并使用相应命令:

  • - 终止HTTP服务器
  • 在后台启动HTTP服务器

状态恢复

模块智能恢复之前的播放状态:

源类型行为
Spotify曲目在精确位置恢复(跳转)
Spotify播放列表
在精确位置恢复(跳转) |
| Spotify电台 | 从头开始恢复(不跳转) |
| 网络电台 | 从头开始恢复(不跳转) |
| 线路输入 | 重新连接线路输入 |
| 电视/HDMI | 重新连接电视音频 |
| 蓝牙 | 重新连接蓝牙 |
| 已暂停内容 | 保持暂停状态 |

跳转行为

某些流媒体服务不支持跳转到特定位置:

  • - 可跳转:Spotify曲目、Spotify播放列表、本地文件、队列项目
  • 不可跳转:Spotify电台、TuneIn电台、Pandora、Tidal电台

模块会自动检测这些情况并进行相应处理。

外部输入检测

自动检测无法暂停的输入:

  • - x-rincon:RINCON - 线路输入
  • x-rincon-stream:RINCON - 线路输入流
  • x-sonos-htastream: - 电视/HDMI(Sonos家庭影院)
  • x-sonos-vanished: - 已消失的设备
  • x-rincon-bt:* - 蓝牙

音效板示例

python
from sonos_core import announce

SOUNDS = {
airhorn: /path/to/sounds/airhorn.mp3,
rimshot: /path/to/sounds/rimshot.mp3,
victory: /path/to/sounds/victory.mp3,
}

def play_sound(name):
播放音效。
if name in SOUNDS:
announce(SOUNDS[name])
else:
print(f未知音效:{name})

故障排除

问题解决方案
未找到扬声器确保与Sonos扬声器在同一网络
恢复失败
检查扬声器在通知前是否正在播放(而非暂停) | | HTTP服务器失败 | 检查端口8888是否可用,或设置SONOSHTTPPORT | | 模块导入错误 | 运行:pip install soco | | 时长检测失败 | 确保已安装ffprobe(ffmpeg的一部分) |

文件

  • - sonos_core.py - 包含announce()函数的主模块
  • SKILL.md - 本文档

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 sonos-announce-1776312857 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 sonos-announce-1776312857 技能

通过命令行安装

skillhub install sonos-announce-1776312857

下载

⬇ 下载 sonos-announce v1.0.4(免费)

文件大小: 7.64 KB | 发布时间: 2026-4-16 16:15

v1.0.4 最新 2026-4-16 16:15
- Metadata updated to include version 1.0.2 in SKILL.md.
- Minor documentation updates; no user-facing code changes described.
- No significant feature or API changes noted in documentation.
返回顶部