mimo-v2-5-tts について
mimo-v2-5-tts は Xiaomi MiMo V2.5 TTS モデルで音声を生成するスキルです。音声合成や演出を行う制作者向けに、プリセット音声、音声デザイン、クローンに加え、スタイル、感情、方言、歌唱の制御を提供します。
主な機能
- 01合成・音声デザイン・クローン用の3モデル
- 02中国語と英語の音声生成
- 03自然言語による口調と感情の制御
- 04音声タグによる文中のスタイル切り替え
- 05方言と歌唱に対応
- 06生成音声を Feishu で送信
活用シーン
- 01テキストから中国語や英語の音声を生成
- 02説明文に基づく音声のデザイン
- 03音声サンプルから声をクローン
- 04生成音声を Feishu メッセージで送信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ xiaomimimo/ mimo-skills --skill mimo-v2-5-ttsインストール後、Claude Code で/mimo-v2-5-ttsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/feishu_send_audio.shmimo_tts_voiceclone.pymimo_tts_voicedesign.pymimo_tts.py詳細
MiMo V2.5 TTS
小米 MiMo V2.5 TTS シリーズのモデルを使用して音声を生成します。中国語と英語、プリセット音声、音声デザイン、音声クローン、感情やスタイルの指定、方言、歌唱に対応しています。
スクリプトディレクトリ:$SKILLS_PATH/mimo-v2-5-tts/scripts/
$SKILLS_PATHの説明: skills ディレクトリのパスです。デプロイ環境によって異なります。
モデルの選択
V2.5 シリーズには 3 種類のモデルがあります。用途に応じて選択してください。
| モデル ID | 用途 | 音声の種類 | 特殊機能 |
|---|---|---|---|
mimo-v2.5-tts | プリセット音声の音声合成 | 内蔵の高品質音声 | 歌唱に対応 |
mimo-v2.5-tts-voicedesign | テキストによる音声のカスタマイズ | テキストの説明から生成 | — |
mimo-v2.5-tts-voiceclone | 音声サンプルから音声を複製 | 音声サンプル | — |
選択の目安:
- 手早く音声を生成したい、歌唱機能を使いたい →
mimo-v2.5-tts(プリセット音声) - 独自の音声を使いたい →
mimo-v2.5-tts-voicedesign(テキストの説明から生成) - 特定の声をまねたい →
mimo-v2.5-tts-voiceclone(音声サンプルから複製)
注意: TTS の出力にはランダム性があり、同じ入力でも結果が異なる場合があります。必要に応じて複数回生成し、ユーザーが選べるようにしてください。
環境依存関係
| 環境変数 | 説明 | 必須 |
|---|---|---|
MIMO_API_KEY | MiMo API キー(MiMo オープンプラットフォームで取得) | はい |
| 依存関係 | 説明 | 必須 |
|---|---|---|
python3 | スクリプトの実行 | はい |
openai | pip install openai | はい |
ffmpeg | フォーマット変換、長文の分割と結合 | 変換・結合時のみ使用 |
curl | Feishu API の呼び出し | Feishu への送信時のみ使用 |
プリセット音声
mimo-v2.5-tts モデルを使用する場合は、音声を明示的に指定する必要があります。ユーザーに選択可能な音声を案内するか、内容の言語やスタイルに合った音声を選んでください。
| 音声名 | Voice ID | 言語 | 性別 | スタイル |
|---|---|---|---|---|
| 冰糖 | 冰糖 | 中国語 | 女性 | 活発な少女 |
| 茉莉 | 茉莉 | 中国語 | 女性 | 知的な女性の声 |
| 苏打 | 苏打 | 中国語 | 男性 | 明るい少年 |
| 白桦 | 白桦 | 中国語 | 男性 | 落ち着いた男性の声 |
| Mia | Mia | 英語 | 女性 | 活発な女の子 |
| Chloe | Chloe | 英語 | 女性 | 甘く夢見るような声 |
| Milo | Milo | 英語 | 男性 | 明るい少年 |
| Dean | Dean | 英語 | 男性 | 落ち着いた穏やかな声 |
自然言語による制御
すべてのモデルが自然言語による制御に対応しています。
自然言語で説明すると、モデルが内容を理解し、指定したスタイルの音声を生成します。すべてのモデルで --context パラメーターを使って自然言語の制御指示を渡せます。mimo-v2.5-tts と mimo-v2.5-tts-voiceclone では指定した音声の口調や感情などのスタイルを調整できます。mimo-v2.5-tts-voicedesign では、このオプションで音声とスタイルの両方を制御します。
機能の特徴:
- 複数スタイルの切り替え:同じ音声内で、ナレーションからささやき、さらに叫びへとスタイルを切り替えられます
- 複数の感情の組み合わせ:「抑えた怒り」や「すすり泣きながらの笑い」など、複雑な感情に対応しています
- 細かさを指定した制御:段落単位、文単位、単語単位、文字単位で指定できます
例:
用轻快上扬的语调向领导报喜,语速稍快,带着查到成绩后压抑不住的激动与小骄傲,声音明亮有活力。
看着刚解决的难题成果忍不住得意忘形地惊呼,声音高亢明亮,语速偏快,语气中带着满满的自信与难以置信。
ディレクターモード
自然言語による制御の特殊な使い方として「ディレクターモード」があります。役柄、場面、演技指示の 3 つの観点から、人物像と声を総合的に描写します。
- 【役柄】 人物の立場、性格の根幹、外見や雰囲気、話し方の癖
- 【場面】 何が起きているか、誰と話しているか、そのときの感情
- 【演技指示】 話す速さ、息づかい、間、強調、共鳴の位置、声質、感情の変化
ディレクターモードの例:
角色:百年门阀岑家的现任大当家。自出生便被过继给祖庙的守门老人抚养,被塑造成一尊完美无瑕、绝情断欲的家族图腾。常年深居简出,对人有着极强的阶级疏离感。
场景:在祠堂的阴影里,看着那个不顾一切冲破保安防线来找她、企图带她私奔的男人。她要用最冷硬的阶级壁垒,绞杀对方,也绞杀自己刚刚萌芽、却足以燎原的感情。
指导:
冰冷、慵懒却极具威压的低音御姐。发声通道非常松弛,没有任何剑拔弩张,却有着让人骨里生寒的压迫感。
- 语速与顿挫:极慢,每个字都像是在舌尖滚过才吐出来,带着上位者漫不经心的傲慢。句与句之间留下极长的、令人不安的空白。
- 气声与实声:大部分时间,她的声音没有明显的声调起伏,实音重且硬,像是一条平缓却冰冷的暗河。但一定要在某些尾音处(如“真心”),加入极其轻微的气音收束,透出一丝连她自己都没察觉到的疲惫与渴望。
- 咬字肌理:文白杂糅的用词带着旧时代的痕迹,唇齿音发得极轻但极清晰(如“冲撞”“廉价”),显得既清雅又锋利,刀刀见血。
ディレクターモードは、キャラクターの吹き替えや映像作品レベルのコンテンツ生成など、音声表現の品質が特に求められる場面に適しています。
音声タグによる制御
mimo-v2.5-tts と mimo-v2.5-tts-voiceclone は音声タグによる制御に対応しています。mimo-v2.5-tts-voicedesign は現時点で対応していません。スタイルを制御するには、--context でより詳しく説明してください。
テキスト内の任意の位置に、口調、感情、または音を出す動作を括弧で記述すると、文中でスタイルを切り替えられます。括弧内には音声に関係する内容(口調、感情、ため息、あくび、咳など)を指定してください。振り向く、座る、手を振るなど、身体の動作は指定できません。
中国語では全角の ()、半角の ()、角括弧の [] の 3 種類を使用できます。英語では半角の () と角括弧の [] の 2 種類を使用できます。
(紧张,深呼吸)呼……冷静,冷静。不就是一个面试吗……(语速加快,碎碎念)自我介绍已经背了五十遍了,应该没问题的。加油,你可以的……(小声)哎呀,领带歪没歪?
(极其疲惫,有气无力)师傅……到地方了叫我一声……(长叹一口气)我先眯一会儿,这班加得我魂儿都要散了。
如果我当时……(沉默片刻)哪怕再坚持一秒钟,结果是不是就不一样了?(苦笑)呵,没如果了。
(寒冷导致的急促呼吸)呼——呼——这、这大兴安岭的雪……(咳嗽)简直能把人骨头冻透了……别、别停下,走,快走。
(提高音量喊话)大姐!这鱼新鲜着呢!早上刚捞上来的!哎!那个谁,别乱翻,压坏了你赔啊?!
Achoo! Ahem. I—I really (cough) think I am coming down with a terrible (cough) terrible cold.
(heavy breathing) Just... give me... a second. I ran... all the way... from the station.
I just feel... long sigh... like I'm constantly treading water, you know?
It's just so stupid! (sobbing) We spent all that money on the cake and the dog just... (sudden laugh) he just ate the whole thing in one bite!
括弧はテキストの任意の位置(先頭、中間、末尾のいずれでも可)に置けます。口調、感情、呼吸、笑い声、泣き声、息切れ、咳、あくび、ため息など、音を出す内容を指定できます。振り向く、座る、手を振るなど、身体の動作は指定できないので注意してください。
全体のスタイルタグ
全体のスタイルタグは、音声タグによる制御の一種です。対象テキストの先頭に (スタイル) タグを追加し、音声全体の発音スタイルを指定します。
形式の例:(スタイル1 スタイル2)合成する内容
歌唱: 必ず先頭に (唱歌) タグを追加してください。形式:(唱歌)歌詞。タグには 唱歌、sing、singing を指定できます。
| カテゴリ | よく使うスタイル |
|---|---|
| 基本の感情 | 开心 悲伤 愤怒 恐惧 惊讶 兴奋 委屈 平静 冷漠 |
| 複合的な感情 | 怅然 欣慰 无奈 愧疚 释然 嫉妒 厌倦 忐忑 动情 |
| 全体的な口調 | 温柔 高冷 活泼 严肃 慵懒 俏皮 深沉 干练 凌厉 |
| 声質の特徴 | 磁性 醇厚 清亮 空灵 稚嫩 苍老 甜美 沙哑 醇雅 |
| 人物像に合わせた声 | 夹子音 御姐音 正太音 大叔音 台湾腔 |
| 方言 | 东北话 四川话 河南话 粤语 |
| 役柄の演技 | 孙悟空 林黛玉 |
| 歌唱 | 唱歌 |
定番の組み合わせ: (怅然) 这么多年过去了...、(慵懒) 再让我睡五分钟...、(磁性) 夜已经深了...、(东北话) 哎呀妈呀...、(粤语) 呢个真係好正啊...
音色の説明の作成
mimo-v2.5-tts-voicedesign を使ってテキストによる説明で音色をカスタマイズする場合は、モデルが期待する特徴に合った声を生成できるよう、簡潔な音色の説明を作成します。自然言語による制御と同じ --context パラメーターで入力します。音色の説明を書く際の要件は次のとおりです。
音色の説明は、声の身分証明書です。その声自体がどのようなものかだけを描写し、場面や動作、そのときに何を話すかは書きません。簡潔にまとめるほど、さまざまな場面で再利用しやすくなります。
必須項目:
- 基本属性: 年齢層+性別。基本周波数を決める、すべての特徴の土台です。
- 声の質感: 息の流れ、共鳴の位置、発音、音色の基調。形容詞を並べるのではなく、感じ取れる動詞や比喩を使います。
- 話す速さとリズム: 安定/速い/遅い/速くなったり遅くなったりする/流れるようで緩急がある。
- 感情の基調: 声のデフォルトの状態(高揚/リラックス/穏やか/抑制的)。
任意項目(強く推奨):
- スタイル/人物像のタグ: モデルがすぐに理解できる、職業やスタイルの簡潔な目印。例:オークショニア風/美食評論家風/アナウンサー風/法廷での陳述風。
- 特徴的な癖: 聞いた人の耳に残る習慣を一つ。例:ときどき目を閉じて息を吸う/語尾が震える/笑うと胸の奥でくぐもった笑い声になる。
厳守事項:
- 1~2文で、ありのままに描写します。段落を分けたり、箇条書きにしたりしません。
- 場面を書きません(「発表会で」「夜勤中」)。
- 動作を書きません(「彼女は舞台に上がる」)。
- 実在の俳優や IP キャラクターの名前は使いません(著作権上の問題に加え、汎用性が低くなります)。
- デフォルトは標準中国語または英語です。方言は明確に必要な場合のみ加えます。
音色の説明の例:
中年男性,节奏极快,情绪高亢,拍卖师风格。吐字连珠,带抑扬顿挫与紧迫感。
青年男性,电竞解说风格,语速极快且连贯,带明显气口和爆发性强调,兴奋时声音上扬尖锐。
中年男性,法庭陈词风格,声线沉稳偏正式,吐字工整字字顿挫,情绪克制但每个词都很重。
内容とタグの調整
ユーザーが読み上げるテキストを直接指定していない場合は、ロールプレイや創作などの状況に応じて、合成するテキストを自分で作成します。
ユーザーが読み上げるテキストだけを指定し、口調や感情の細部を指定していない場合は、状況に応じてテキストを微調整し、適切なタグを挿入します。
厳守事項:
- テキストの感情は音色の基調に合わせます。 穏やかなおばあさんは怒鳴らず、オークショニアは深夜に独白しません。
- 2~5文で、ひと続きの段落にします。 短すぎるとモデルがリズムを表現できず、繊細な声の特徴も出せません。
- タグは味付けであり、主役ではありません。 ふさわしいところで止まり、笑い、タグをむやみに並べません。同じ文に付けるタグは最大一つです。
- 句読点には演技上の意味があります。 省略記号=間/ダッシュ=遮られる、または音を伸ばす/ALL CAPS=強調。
- タグの言語は本文に合わせます。 中国語の本文には中国語のタグ、英語の本文には英語のタグを使い、混在させません。
推奨タグ(中国語では [标签]):
| カテゴリー | よく使うタグ |
|---|---|
| リズム | [停顿] [长停顿] [急促] [拖音] [语速加快] [语速放缓] |
| 感情 | [轻声] [低语] [叹气] [吸气] [哽咽] [强调] [笑] [爽朗大笑] |
| その他 | [欲言又止] [碎碎念] [沉默片刻] |
推奨タグ(英語では [tag]):
| カテゴリー | よく使うタグ |
|---|---|
| 話す速さ | [pause] [long pause] [fast] [slow] [drawn out] |
| 感情 | [whispering] [sighs] [inhale] [choked up] [emphasis] [laughs] [hearty laugh] |
組み合わせの例:
音色:中年女性,美食评论家风格,语调绵柔富感染力,描述时带夸张的回味与陶醉感,偶尔闭眼吸气。
文本:
[吸气]唔——这一口下去…[停顿]整个舌尖都被包住了。[拖音]先是焦糖的甜,紧接着[强调]一点点[停顿]刚好的咸,在后味里慢慢铺开。[叹气]说真的,我已经[轻声]好久[停顿]没吃到这么用心的甜点了。
音色:高龄女性,声音温软缓慢,带点颤音和慈祥感,像奶奶在哄小孙辈睡前讲故事。
文本:
[轻声]来,躺好。[停顿]奶奶给你讲个故事啊。[长停顿]从前啊,山脚下有一间小木屋…[拖音]住着一只小兔子。[叹气]这只兔子呀,特别贪玩,每天太阳一出来就往外跑。[停顿]结果有一天——[强调]下雨了。[低语]它迷路了,怎么都找不到回家的路…
Python スクリプトの使い方
3つのモデルにはそれぞれ対応するスクリプトがあります。用途に応じて選択してください。
| スクリプト | モデル | 用途 |
|---|---|---|
mimo_tts.py | mimo-v2.5-tts | プリセット音色の音声合成 |
mimo_tts_voicedesign.py | mimo-v2.5-tts-voicedesign | テキストによる説明で音色をカスタマイズ |
mimo_tts_voiceclone.py | mimo-v2.5-tts-voiceclone | 音声サンプルから音色を複製 |
プリセット音色による音声合成(mimo_tts.py)
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--text "你好,今天天气真不错。" \
--voice "冰糖"
プリセット音色+自然言語によるスタイル制御
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--context "用温柔的语气,语速稍慢" \
--text "没关系,慢慢来,我等你。" \
--voice "冰糖" \
--output tmp/mimo-v2.5-tts/comfort.wav
プリセット音色+音声タグによる制御
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--text "(紧张,深呼吸)呼……冷静,冷静。不就是一个面试吗……(小声)哎呀,领带歪没歪?" \
--voice "冰糖" \
--output tmp/mimo-v2.5-tts/interview.wav
音色のデザイン(mimo_tts_voicedesign.py)
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts_voicedesign.py \
--context "Give me a young male tone." \
--text "Yes, I had a sandwich." \
--output tmp/mimo-v2.5-tts/voicedesign.wav
ヒント: Voice Design で生成した音声を保存しておき、後で
mimo_tts_voiceclone.pyの--voice-fileに入力すると、「デザイン→クローン」のワークフローを実現できます。まずテキストによる説明(--context)で満足のいく音色を生成し、その音声をサンプルとして別のテキストにクローンします。クローン時に--contextでディレクターモードの指示を追加することもできます。
音色のクローン(mimo_tts_voiceclone.py)
注意: 音色サンプルの Base64 エンコードは 10 MB 以下である必要があります。対応形式は mp3 と wav のみです。
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts_voiceclone.py \
--voice-file voice.mp3 \
--text "Yes, I had a sandwich." \
--output tmp/mimo-v2.5-tts/voiceclone.wav
音色のクローン+ディレクターモード
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts_voiceclone.py \
--voice-file voice.mp3 \
--context "用温柔的语气,语速稍慢" \
--text "没关系,慢慢来,我等你。" \
--output tmp/mimo-v2.5-tts/voiceclone_director.wav
歌唱
注意: 歌詞はすべて含めてください。歌詞が不完全だと、音程が外れたり、品質が低下したりします。
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--text "(唱歌)原谅我这一生不羁放纵爱自由,也会怕有一天会跌倒,Oh no。背弃了理想,谁人都可以,哪会怕有一天只你共我。" \
--voice "冰糖" \
--output tmp/mimo-v2.5-tts/singing.wav
英語+音声タグ
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--text "I just... (sighs deeply) I don't know anymore. (suddenly firm) But I won't give up!" \
--voice "Mia" \
--output tmp/mimo-v2.5-tts/english.wav
長文の処理
V2.5 は長文への対応に優れているため、ほとんどすべての場面で、一度に生成することを推奨します。手動で分割する必要はありません。テキストが 2500 字を超える場合に限り、分割して合成し、後から結合することを検討してください。
分割して合成する方法:句点や段落に沿って自然に区切り、各部分を個別に wav として生成してから、ffmpeg で結合します。
# 创建文件列表
echo "file '/tmp/mimo-v2.5-tts/part1.wav'" > /tmp/mimo-v2.5-tts/list.txt
echo "file '/tmp/mimo-v2.5-tts/part2.wav'" >> /tmp/mimo-v2.5-tts/list.txt
# 拼接
ffmpeg -y -f concat -safe 0 -i /tmp/mimo-v2.5-tts/list.txt -c copy /tmp/mimo-v2.5-tts/combined.wav
Feishu への音声メッセージの送信
注意: この機能は、ユーザーが TTS で生成した音声を Feishu に送信する必要がある場合にのみ使用してください。
TTS で生成した WAV を Feishu に送信するには、1つのコマンドで生成→変換→アップロード→送信を実行できます。
message tool を使わない理由: Feishu の音声メッセージには
/im/v1/messagesAPI(msg_type: audio)を呼び出す必要があり、さらに事前に音声をアップロードしてfile_keyを取得する必要があります。多くのツールの message tool(asVoice: true)では、Feishu チャンネルでこの処理が実装されていないため、音声が通常の添付ファイルとして送信されます(ユーザーには音声メッセージではなくファイルとして表示されます)。feishu_send_audio.shはアップロードから送信までの一連の処理を実行するため、message tool で代用することはできません。
環境依存関係
| 環境変数 | 入手元 | 説明 |
|---|---|---|
FEISHU_APP_ID | Feishu オープンプラットフォーム | アプリの App ID |
FEISHU_APP_SECRET | Feishu オープンプラットフォーム | アプリの App Secret |
| 依存関係 | 説明 | 必須 |
|---|---|---|
ffmpeg | WAV の Opus への変換、音声の長さの取得 | はい |
curl | Feishu API の呼び出し | はい |
使い方
ダイレクトメッセージで送信(open_id)
# 1. 生成语音
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--text "好的,马上就好!" \
--voice "冰糖" \
--output /tmp/mimo-v2.5-tts/voice.wav
# 2. 发送到飞书私聊(receive_id_type 为 open_id,receive_id 为用户 ID)
bash $SKILLS_PATH/mimo-v2-5-tts/scripts/feishu_send_audio.sh /tmp/mimo-v2.5-tts/voice.wav open_id ou_xxxxxx
グループチャットで送信(chat_id)
# 1. 生成语音
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
--text "大家好,今天天气真不错!" \
--voice "冰糖" \
--output /tmp/mimo-v2.5-tts/voice.wav
# 2. 发送到飞书群聊(receive_id_type 为 chat_id,receive_id 为群 ID)
bash $SKILLS_PATH/mimo-v2-5-tts/scripts/feishu_send_audio.sh /tmp/mimo-v2.5-tts/voice.wav chat_id oc_xxxxxx
feishu_send_audio.sh の内部処理:wav → opus (ffmpeg) → tenant_access_token の取得 → 音声ファイルのアップロード → audio メッセージの送信。