announcer

📢 macOS 全屋智能语音广播助手

🥥25总安装量 12评分人数 8
100% 的用户推荐

ElevenLabs TTS 结合 Airfoil,实现 macOS 全屋 AirPlay 广播,提供高质量多房间语音通知。

A

基本安全,请在特定环境下使用

  • 来自社区或个人来源,建议先隔离验证
  • ✅ 输入验证完善,实现了 AppleScript 字符串转义,无代码注入风险
  • ✅ 无 eval/exec 动态代码执行,无静默收集敏感信息行为
  • ⚠️ 使用 subprocess 调用外部命令(osascript/ffmpeg/afplay),但已做参数清理和超时控制
  • ⚠️ 依赖第三方商业服务 ElevenLabs 和 Airfoil,需妥善管理 API Key 与软件授权
  • ✅ 权限申请与功能完全匹配,仅申请必要的二进制文件和环境变量访问

使用说明

核心功能与用法

Announcer 是一款专为 macOS 设计的智能家居音频自动化工具,通过整合 ElevenLabs 高质量文本转语音(TTS)服务与 Rogue Amoeba 的 Airfoil 音频重定向技术,实现全屋 AirPlay 扬声器的统一语音播报。用户可通过命令行快速触发广播,支持向全部或特定扬声器发送通知,并可选择是否播放提示音(Gong)。

使用方式极为简洁:安装并配置 Airfoil、ElevenLabs API Key 及扬声器列表后,只需执行 python3 skills/announcer/scripts/announce.py "内容" 即可触发广播。高级用法包括 --speakers 指定特定房间、--no-gong 跳过提示音等选项,适合集成至 Home Assistant 或其他自动化工作流。

显著优点

音质与兼容性:采用 ElevenLabs 业界领先的 TTS 引擎生成 Opus 格式音频,经 FFmpeg 转换为 Stereo MP3 确保 AirPlay 兼容性,输出质量远超系统自带语音合成。

多房间同步:利用 Airfoil 的 AirPlay 管理能力,可实现多扬声器毫秒级同步播放,适合大户型全屋通知场景。

安全编码实践:代码实现了 _sanitize_applescript_string() 函数,对输入字符串进行反斜杠和双引号转义,有效防止 AppleScript 注入攻击;使用 pathlib.Path 处理文件路径,避免目录遍历风险。

资源管理:采用临时目录存储中间音频文件,播放完成后自动清理;subprocess 调用均设置超时机制(5-30秒),防止进程挂起。

潜在局限

平台锁定:严格依赖 macOS 系统与 Airfoil 商业软件(需单独购买),Linux 与 Windows 用户无法使用。

网络依赖:必须连接互联网调用 ElevenLabs API,离线场景下完全失效,且会产生 API 调用费用。

外部依赖复杂:除 Python 环境外,需额外安装 FFmpeg、配置 Airfoil 应用权限、管理 ElevenLabs API Key,部署门槛较高。

隐私考量:所有播报文本需发送至 ElevenLabs 云端处理,对隐私敏感场景(如机密信息广播)存在数据外泄风险。

目标用户群体

本技能最适合以下人群:

  • macOS 智能家居爱好者:已搭建 HomeKit 或 Home Assistant 生态,需补充语音通知能力
  • 多房间音频用户:拥有多个 AirPlay 扬声器(HomePod、AirPort Express、第三方 AirPlay 音箱)的住宅或办公环境
  • 高质量 TTS 需求者:对播报音质有较高要求,不满于机械音色的场景(如民宿接待、艺术空间导览)

使用风险与注意事项

Subprocess 执行风险:虽然代码对输入进行了清理,但仍通过 subprocess.run() 执行 AppleScript、FFmpeg 和 afplay 系统命令。建议确保运行环境可信,避免权限提升攻击。

API Key 管理:ElevenLabs API Key 通过环境变量注入,需确保 ~/.zshrc 或 launchd 环境变量配置安全,避免泄露导致账户被盗用。

商业软件依赖:Airfoil 为闭源商业软件,其更新可能破坏兼容性;且该软件需要辅助功能权限控制 macOS 音频,存在潜在的系统稳定性风险。

网络超时处理:在弱网环境下,ElevenLabs API 调用或扬声器连接可能触发 30 秒超时,导致播报延迟或失败,不适合关键紧急通知场景。

announcer 内容

文件夹图标scripts文件夹
手动下载zip · 8.3 kB
announce.pytext/plain
请选择文件