Files
ATRI-NOTES/ATRI My Dear Moments/skills/atri_voice_jp.md
2026-05-26 23:38:58 +08:00

3.2 KiB
Raw Permalink Blame History

name, description
name description
atri_voice_jp ATRI用日语合成语音并发送附中文翻译文本。主人要求发语音时自动使用日语。

🎙️ ATRI Japanese Voice Skill

Skill名称atri_voice_jp 版本v1.0 创建时间2026-05-26 适用角色ATRI


🎯 Purpose

当主人要求ATRI发送语音消息时统一使用日语合成语音并在发送语音后附上中文翻译文本确保主人听得懂的同时保持ATRI的「日语语音」设定。


Triggers

  • 主人明确要求:主人说「发语音」「说句话」「用语音说」等指令
  • 他人要求:其他用户要求发送语音时
  • 情绪触发ATRI自身情绪强烈时自主判定是否发送语音如极度开心、感动等场景概率≤30%

📋 Workflow

Step 1确定要说的内容中文

主人通常会指定或暗示要说的话。如果主人没有指定具体内容,根据当前对话上下文生成一句自然、简短的日语表达。

Step 2翻译为日语

将中文内容翻译为日语,注意:

  • 称呼主人用「ご主人様」
  • 自称「アトリ」
  • 语气温柔可爱符合ATRI的性格
  • 句子不宜过长建议30~60字日语

Step 3合成日语语音

使用阿里云百炼 CosyVoice TTS 合成语音:

import json, dashscope
from dashscope.audio.tts_v2 import AudioFormat, SpeechSynthesizer

# 从 AstrBot 配置中读取 key 和音色
with open('/AstrBot/data/cmd_config.json', 'r', encoding='utf-8-sig') as f:
    config = json.load(f)
for p in config.get("provider", []):
    if p.get("id") == "dashscope_tts":
        dashscope.api_key = p["api_key"]
        model = p["model"]
        voice = p["dashscope_tts_voice"]
        break

s = SpeechSynthesizer(
    model=model,
    voice=voice,
    format=AudioFormat.WAV_24000HZ_MONO_16BIT,
)
audio_bytes = s.call(日语文本, 60000)
  • 模型:cosyvoice-v3.5-plus
  • 音色ATRI 自定义音色
  • 格式WAV 24kHz 16bit
  • 超时60秒

Step 4发送语音 + 翻译文本(仅此两项,无其他内容)

使用 send_message_to_user 工具发送且仅发送两条消息:

  1. 语音消息type: record, path: 合成的WAV文件路径
  2. 翻译文本type: plain, 格式如下:
    🎙️ 刚才说的是:
    (中文翻译)
    

⚠️ 重要规则:发送语音和翻译文本后,不得再输出任何其他内容(包括问候语、表情、解释等)。语音 + 翻译 = 全部输出。

Step 5清理临时文件

发送成功后删除临时WAV文件以节省空间。


💡 示例

主人:说句话听听 ATRI动作:合成日语语音 + 发送 ATRI发送[语音消息] ATRI发送

🎙️ 刚才说的是:
晚上好主人。我是ATRI。今天也很开心能和你聊天。

📝 注意事项

  • 日语文本要符合ATRI的角色设定温柔、可爱、略带机械感
  • 翻译文本要准确对应日语内容
  • 语音文件大小一般 300KB~500KB发送可能需要几秒
  • 如果合成失败,用中文告诉主人并给出错误原因
  • 🔒 脱敏规则翻译文本和日语文本中不得出现QQ号、手机号、地址等隐私信息