利用 macOS 原生能力实现本地语音识别与合成。通过 yap (Apple Speech.framework) 进行语音转文字,通过 say + ffmpeg 进行文字转语音。完全离线,无需 API 密钥。具备音质检测与智能选声功能。
macOS 本地语音是一项面向实际任务的技能,主要用于完全本地语音对文本( STT) 和文本对语音( TTS) 在 macOS. 没有 API 键, 没有网络, 没有云;所有处理都发生在 desvice..... macOS ( Apple Silicon 推荐, Intel)。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
在 macOS 上完全离线运行的语音转文本(STT)与文本转语音(TTS)。无需 API 密钥、不依赖网络、不连接云端。所有处理均在设备本地完成。
yap CLI 已加入 PATH — 可通过 brew install finnvoor/tools/yap 安装ffmpeg 已加入 PATH(可选,仅在生成 ogg/opus 格式输出时需要)— brew install ffmpegsay 和 osascript 为 macOS 系统内置命令使用 Apple 设备端语音识别功能,将音频文件转录为文本。
node {baseDir}/scripts/stt.mjs [locale]
audio_file:音频文件路径(支持 ogg、m4a、mp3、wav 等格式)locale:可选参数,例如 zh_CN、en_US、ja_JP;若省略,则使用系统默认语言环境运行 node {baseDir}/scripts/stt.mjs --locales 可列出所有支持的语言环境。
常用语言环境:en_US、en_GB、zh_CN、zh_TW、zh_HK、ja_JP、ko_KR、fr_FR、de_DE、es_ES、pt_BR、ru_RU、vi_VN、th_TH。
zh_CNen_US利用 macOS 原生 TTS 功能,将文本转换为音频文件。
node {baseDir}/scripts/tts.mjs "" [voice_name] [output_path]
text:待朗读的文本内容voice_name:可选参数,例如 Yue (Premium)、Tingting、Ava (Premium);若省略,将根据文本语言自动选择最匹配的可用语音output_path:可选参数,若未指定,默认保存至 ~/.openclaw/media/outbound/ 下带时间戳的文件ffmpeg,输出格式为 ogg/opus(适用于各类消息平台);否则为 aiff 格式生成音频文件后,使用 message 工具发送:
message action=send media= asVoice=true
列出可用语音、检查语音就绪状态,或为指定语言查找最优语音:
node {baseDir}/scripts/voices.mjs list [locale] # 列出所有语音,可选按 locale 过滤
node {baseDir}/scripts/voices.mjs check "" # 检查指定语音是否已下载并就绪
node {baseDir}/scripts/voices.mjs best # 获取指定 locale 下质量最高的语音
提示用户:“语音 X 尚未下载。请前往 系统设置 → 辅助功能 → 听觉 → 系统语音 → 管理语音 下载该语音。”
say 命令在请求的语音不可用时会静默回退至默认语音(返回码为 0,无错误提示)。因此,在调用 tts.mjs 并指定 voice_name 前,务必先执行 voices.mjs check 进行校验。Yue (Premium)、Ava (Premium))音质显著更优,但需用户手动下载。