voicebox について
voiceboxは、mlx-audioを使うスタンドアロンのテキスト読み上げスキルです。スクリプトを通じて、音声の設計やクローン、文字起こし、複数話者の音声生成を行えます。
主な機能
- 01音声プロファイルによる読み上げ
- 02説明文からの音声設計
- 03音声サンプルからのクローン作成
- 04音声・動画の文字起こし
- 05複数話者の会話生成
- 06モデル品質の選択
活用シーン
- 01テキストからナレーションを作成
- 02説明文から音声プロファイルを作成
- 03録音から音声をクローン
- 04音声や動画を文字起こし
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tivojn/ voicebox --skill voiceboxインストール後、Claude Code で/voiceboxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignoreREADME.mdscripts/mlx_tts_server.pytranscribe.pyvoicebox.py詳細
Voicebox TTS スキル
パスの規則: 以下のすべてのコマンドでは、このスキルのベースディレクトリを
$SKILL_DIRとします。Claude がスキルを読み込むと、システムプロンプトにBase directory for this skill: <path>が含まれます。そのパスを使用してください。例:~/.agent/skills/voicebox/にインストールされている場合、$SKILL_DIR = ~/.agent/skills/voiceboxです。
mlx-audio を使用したスタンドアロンのテキスト読み上げです。カスタム音声のデザイン(テキストによる説明から作成)と音声クローニング(音声サンプルから作成)に対応しています。外部アプリは不要です。
重要:デフォルトの動作ルール
/voicebox の後にキーワード(「create」「clone」「transcribe」「record」「list」「delete」など)ではなく通常のテキストが続く場合、デフォルトの動作として、必ず「Calm Narrator」プロファイルを使用してすぐに音声を生成します。追加の質問はしないでください。選択肢のメニューも表示しないでください。生成コマンドを実行して、音声を再生してください。
例:/voicebox hello → すぐに次を実行します。
uv run $SKILL_DIR/scripts/voicebox.py generate "Calm Narrator" "hello" --play
入力に明示的なキーワードが含まれる場合にのみ、ほかのモードに切り替えてください。
- 「create」/「design」→ モード 2(プロファイルを作成)
- 「clone」/「record」→ モード 3/4(音声をクローニング)
- 「transcribe」→ モード 5(文字起こし)
- 「conversation」/「drama」/「audiobook」→ モード 6(複数話者)
- 「list」/「delete」/「speakers」/「models」→ 管理コマンド
それ以外はすべて、すぐに音声を生成します。
使用方法
音声を生成
/voicebox "Hello world" (uses default: Calm Narrator)
/voicebox "Calm Narrator" "Hello world" (explicit profile)
/voicebox "angry tone" "My Voice" "I can't believe this!" (style + profile)
プロファイルを作成
/voicebox create a calm narrator voice profile (designed - from description)
/voicebox create a custom profile using Ryan (custom - preset speaker)
/voicebox clone my voice from /path/to/audio.wav (cloned - from audio file)
/voicebox clone my voice (record from mic + clone)
音声/動画を文字起こし
/voicebox transcribe /path/to/audio.wav
/voicebox transcribe /path/to/video.mp4
複数話者の会話を生成
/voicebox create a news broadcast with anchor, reporter, and expert
/voicebox make a conversation between Calm Narrator and Cheerful Girl
/voicebox generate a drama scene with these characters...
トリガーフレーズ(このスキルを自動的に有効化)
- 「自分の声をクローニングして」「自分の声を録音して」「音声クローンを作成して」
- 「これを文字起こしして」「音声を文字起こしして」「動画を文字起こしして」
- 「会話を作成して」「ドラマを作って」「対話を生成して」「オーディオブック」
- 音声/動画の文字起こしや音声テキスト化に関するリクエスト全般
アーキテクチャ
品質レベル別に、3 つのモデルカテゴリがあります。
| カテゴリ | 高品質(デフォルト) | 標準 | 用途 |
|---|---|---|---|
| 音声デザイン | Qwen3-TTS-12Hz-1.7B-VoiceDesign-bf16 | (同じ — 1.7B のみ) | 説明からカスタム音声を作成 |
| 音声クローン | Qwen3-TTS-12Hz-1.7B-Base-bf16 | Qwen3-TTS-12Hz-0.6B-Base-bf16 | 実際の音声をクローニング |
| カスタム音声 | Qwen3-TTS-12Hz-1.7B-CustomVoice-bf16 | Qwen3-TTS-12Hz-0.6B-CustomVoice-bf16 | スタイルを調整できる 9 種類のプリセット高品質話者 |
| ASR(文字起こし) | Qwen/Qwen3-ASR-1.7B | Qwen/Qwen3-ASR-0.6B | 音声テキスト化 |
すべてのコマンドでは、モデルの品質レベルを選択するために --quality standard または --quality high(デフォルト)を指定できます。
すべての状態は、スキルの data/ ディレクトリ(デフォルト:$SKILL_DIR/data/)に保存されます。
profiles.json— プロファイルレジストリsamples/— 参照音声の WAV ファイル
スクリプト:scripts/voicebox.py(スキルのルートからの相対パス)
デフォルトプロファイル
| コンテキスト | デフォルトプロファイル | 種類 | 最適な用途 |
|---|---|---|---|
| 全体のデフォルト(英語テキスト) | Calm Narrator | デザイン済み | ニュートラルなナレーション |
| CustomVoice:中国語 | Dylan | カスタム(話者:dylan) | 感情を込めた中国語 |
| CustomVoice:英語 | Aiden | カスタム(話者:aiden) | 感情を込めた英語 |
| CustomVoice:日本語 | Ono Anna | カスタム(話者:ono_anna) | 感情を込めた日本語 |
ユーザーがテキストのみの /voicebox "some text"(引用符付き引数が 1 つ)を実行した場合は、デフォルトで Calm Narrator を使用してください。
テキストに感情を込めた読み上げが必要な場合や、ユーザーが特定の感情(怒り、悲しみ、興奮など)を指定した場合は、言語に応じた CustomVoice のデフォルトを優先してください:中国語には Dylan、英語には Aiden、日本語には Ono Anna を使用します。CustomVoice では、感情を制御するために --instruct を指定できます。
モード 1:音声を生成
手順
-
引数を解析する — 引用符付き引数の数を数えます。
- 引用符付き引数が 1 つ → テキストのみです。デフォルトのプロファイル(「Calm Narrator」)を使用します。
- 引用符付き引数が 2 つ → 1 つ目はプロファイル名、2 つ目は読み上げるテキストです。
- 引用符付き引数が 3 つ → 1 つ目はスタイル/指示、2 つ目はプロファイル名、3 つ目はテキストです。
-
プロファイルを探す — profiles.json でプロファイル名を検索します(大文字と小文字は区別せず、部分一致も可)。
-
感情によるセグメント分割(明示的な指定がある場合のみ。デフォルトでは実行しないでください):
デフォルトでは、長いテキストも
generateを使って一度に生成します。 テキストを感情ごとのセグメントに自動分割しないでください。次のようなフレーズでユーザーが明示的にリクエストした場合のみ、感情によるセグメント分割を有効にします。- 「感情を込めて」、「自動で感情を付けて」、「感情ごとに分割して」、「感情豊かに話して」
- 「感情ごとに分けて」、「感情に変化を付けて」、「表現豊かにして」
ユーザーが感情によるセグメント分割を依頼していない場合は、テキストの長さにかかわらず、この手順をすべて省略し、手順 4(通常の生成)に進んでください。
ユーザーが感情によるセグメント分割を明示的にリクエストした場合:
a. テキストを分析する — 明確に異なる感情のセグメントを特定します(例:興奮 → 不安 → 決意 → 感謝)。
b. セグメントに分割する — 自然な感情の境界(文または節のレベル)でテキストを分割します。
c. 各セグメントに、次の候補から適切な感情を
instructに設定します。- 喜び/興奮:
"excited, enthusiastic, joyful tone"、"ecstatic, breathless with joy" - 怒り:
"angry, furious, intense tone"、"irritated, sharp and impatient" - 悲しみ/悲嘆:
"sorrowful, heartbroken, tearful voice"、"melancholic, quiet and reflective" - 恐怖/パニック:
"panicked, terrified, desperate tone"、"anxious, nervous, trembling voice" - 落ち着き/中立:
"calm, steady, composed delivery"、"warm and reassuring tone" - 驚き:
"shocked, astonished, wide-eyed disbelief" - 決意:
"determined, resolute, firm and confident" - 優しさ:
"gentle, tender, soft-spoken with warmth"
d. 会話スクリプトを生成する — 重要:すべての行で同じ単一のプロファイルを使ってください。
これは複数話者の会話ではありません。 感情によるセグメント分割では、1 人が感情を変化させながら話します。スクリプト内のすべての
"profile"の値は同一でなければなりません。ユーザーが選択したプロファイル(またはデフォルトのプロファイル)と同じものを使います。行ごとに変えるのは"instruct"フィールドだけです。セグメントごとに異なるプロファイルを割り当てないでください。{ "title": "emotional_speech", "gap": 0.15, "lines": [ {"profile": "Dylan", "text": "Segment 1 text...", "instruct": "excited, enthusiastic tone"}, {"profile": "Dylan", "text": "Segment 2 text...", "instruct": "worried, anxious, trembling voice"}, {"profile": "Dylan", "text": "Segment 3 text...", "instruct": "determined, resolute, firm tone"}, {"profile": "Dylan", "text": "Segment 4 text...", "instruct": "gentle, grateful, warm and tender"} ] }注:上記の 4 行すべてで
"Dylan"を使っています。同じプロファイルを使うのは意図的であり、必須です。e. 単一の generate の代わりに会話コマンドを使います。
uv run $SKILL_DIR/scripts/voicebox.py conversation /tmp/emotional_script.json --play --gap 0.15重要 — 感情によるセグメント分割と複数話者の違い:
- 感情によるセグメント分割(このセクション): 明示的な指定がある場合のみ。1 つの声で感情を変化させます。すべての行で同じプロファイルを使います。
- 複数話者の会話(モード 6): 複数の声を使い、行ごとに異なるプロファイルを割り当てます。ユーザーが会話/対話/ドラマを依頼した場合のみ使います。
- 長いテキストのデフォルト:
generateを 1 回だけ実行します。セグメント分割もテキストの分割もしません。
-
通常の生成(短いテキスト、または感情表現が不要な場合):
uv run $SKILL_DIR/scripts/voicebox.py generate "Profile Name" "text to speak" --playスタイルを指定して生成する場合(感情を込めた短いテキスト):
uv run $SKILL_DIR/scripts/voicebox.py generate "Profile Name" "text to speak" --instruct "angry tone" --playクローン音声を高品質(1.7B モデル)で生成する場合:
uv run $SKILL_DIR/scripts/voicebox.py generate "Profile Name" "text to speak" --quality high --play重要:タイムアウトには 300000ms を指定してください。初回実行時はモデルの読み込みと生成に時間がかかります。
-
結果を報告する — 音声が生成され、再生されたことをユーザーに伝えます。再生時間と使用したプロファイルを示します。
プロファイルがない場合
モード 2 を使って作成することを提案します。
モード 2:説明から音声プロファイルを作成する(設計)
ユーザーが「…の音声プロファイルを作成して」と言った場合:
-
音声の説明を解析します。ユーザーのリクエストから音声の特徴を読み取ります。
-
詳細な音声の説明を作成します。ユーザーの短い説明を、複数の側面からなる詳細な音声プロンプトに展開します。
- テンプレート:
[年齢] [性別]、[高さ]で[特徴]のある声、[話す速度]のペース、[感情/トーン]、[用途]に適しています - 例:「落ち着いたナレーター」→「落ち着いた中年男性のナレーター。低く温かみのあるバリトンボイスで、ゆっくりと落ち着いたペース、安心感と信頼感のあるトーン。オーディオブックのナレーションに適しています」
- 具体的に指定します。「素敵な」のような曖昧な言葉ではなく、「低い」「明瞭な」「テンポの速い」などを使います。
- テンプレート:
-
音声の感情に合ったサンプルテキストを選択します。
- ニュートラル:「朝日が静かな村の上に優しく昇り、石畳の通りを黄金色に照らしました。鳥たちが朝の歌を歌い、世界はゆっくりと目覚めていきました。」
- 怒り:「そんなことはするなと、もう百回も言ったはずです。これはまったく受け入れられません。もうこれ以上、見過ごすわけにはいきません。」
- 陽気:「皆さん、こんにちは!おかえりなさい!今日は皆さんにお知らせしたい素晴らしいニュースがあります。早く始めたくてたまりません!」
-
プロファイルを作成します。
uv run $SKILL_DIR/scripts/voicebox.py create-designed "Calm Narrator" \ --desc "Calm middle-aged male narrator with a deep warm baritone voice, slow measured pace, soothing and trustworthy tone, suitable for audiobook narration" \ --lang en重要:タイムアウトを300000msに設定してください。
-
確認 — プロファイルが作成され、使用できる状態になったことをユーザーに伝えます。
プロファイルの命名規則
- ユーザーの説明をもとに、タイトル形式で大文字にします:「落ち着いたナレーター」「怒った女性」
- 短く(2~3語)まとめます
モード 2b:プリセット話者から音声プロファイルを作成する(カスタム)
ユーザーがプレミアムプリセット音声を使いたい場合(説明も音声も不要):
-
ユーザーが話者を選んでいない場合は、利用可能な話者を表示します。
- 中国語: serena、vivian、uncle_fu、dylan、eric
- 英語: ryan、aiden
- 日本語: ono_anna
- 韓国語: sohee
-
プロファイルを作成します。
uv run $SKILL_DIR/scripts/voicebox.py create-custom "Profile Name" <speaker>話者から言語が自動検出されます。ラベルを付ける場合は、任意で
--descを指定します。 -
スタイルを上書きして生成します。カスタムプロファイルでは、感情やスタイルの指定に
--instructを使用できます。uv run voicebox.py generate "Profile Name" "text" --instruct "angry tone" --play
カスタム、設計、クローンの使い分け
- カスタム — セットアップが速く、高品質で一貫したプリセット音声を使用でき、スタイル指示にも対応します
- 設計 — 創造性に制限がなく、希望する音声を自由に説明できます
- クローン — 音声ファイルから特定の実在人物の声を再現します
モード 3:音声ファイルから音声プロファイルを作成する(クローン)
ユーザーが「/path/to/file.wavから自分の声をクローンして」と言う場合、または音声ファイルを提供した場合:
-
音声ファイルのパスと、録音で話された内容の文字起こしを取得します。
-
文字起こしが提供されていない場合は、組み込みの文字起こし機能を使って自動で文字起こしします。
uv run $SKILL_DIR/scripts/transcribe.py /path/to/audio.wav最後の手段としてのみ、ユーザーに尋ねてください。
-
プロファイルを作成します。
uv run $SKILL_DIR/scripts/voicebox.py create-cloned "My Voice" \ --audio /path/to/sample.wav \ --ref-text "transcript of what was said" \ --lang en -
確認 — プロファイルが作成されたことをユーザーに伝えます。
モード 4:マイクで録音してクローンを作成する(重要)
ユーザーが「自分の声をクローンして」「自分の声を録音して」「声をクローンしたい」と言った場合、または音声ファイルを提供せずに声のクローンを求めた場合、このモードが有効になります。
ステップごとのワークフロー
-
ユーザーにプロフィール名を尋ねます(または「My Voice」、「[User's Name]'s Voice」のような名前を付けます)。
-
どんな内容を話したいか尋ねます。または、適切なサンプル文を提案します。
- 「静かな村の上に朝日が穏やかに昇り、石畳の道を黄金色の光で照らしました。」
- あるいは、何でも自由に話してもらいます。5~15秒の明瞭な音声が最適です。
-
準備ができたことを確認してから、1つのコマンドで録音と自動クローンを実行します。
uv run $SKILL_DIR/scripts/voicebox.py record "My Voice" --duration 10 --lang en- デフォルトは10秒です。ユーザーが長く/短くしたい場合は、
--durationで調整します。 - 話す内容がすでに決まっている場合は、
--ref-text "what they said"を渡します(文字起こしをスキップします)。 --ref-textを指定しない場合、コマンドは組み込みのtranscribe.py(Qwen3-ASR)を使って自動で文字起こしします。外部スキルは必要ありません。- 重要:タイムアウトは300000msに設定してください。
- デフォルトは10秒です。ユーザーが長く/短くしたい場合は、
-
録音を再生して、ユーザーが確認できるようにします。
afplay $SKILL_DIR/data/samples/<slug>.wav -
確認します。プロフィールが作成され、
/voicebox "My Voice" "text to speak"で使用できることをユーザーに伝えます。
要件
- ffmpeg がインストールされている必要があります(
brew install ffmpeg)。 - ターミナルアプリにmacOSのマイク使用許可を付与する必要があります。
モード5:音声/動画の文字起こし
ユーザーが「これを文字起こしして」「音声/動画を文字起こしして」と言った場合、文字起こし用の音声/動画ファイルを提供した場合、または音声からテキストへの変換を依頼した場合に、このモードが有効になります。
ステップごとのワークフロー
-
ユーザーのリクエストからファイルパスを取得します。
-
文字起こしを実行します。
uv run $SKILL_DIR/scripts/transcribe.py /path/to/file.wav言語を指定する場合:
uv run $SKILL_DIR/scripts/transcribe.py /path/to/file.wav --language zh重要:タイムアウトは300000msに設定してください。
-
文字起こし結果をユーザーに返します。
対応形式
- 音声: wav、mp3、flac、m4a、ogg、aac、wma
- 動画: mp4、mkv、mov、avi、webm、m4v、flv、wmv(ffmpegが音声を自動で抽出します)
対応言語
自動検出を含む52言語に対応しています。英語、中国語(方言を含む)、日本語、韓国語、ドイツ語、フランス語、スペイン語、イタリア語、ポルトガル語、ロシア語、アラビア語、ヒンディー語、タイ語、ベトナム語、インドネシア語などに対応しています。
モード6:会話/オーディオブック/ドラマの生成
複数の話者による会話、対話、ドラマ、複数の登場人物がいるオーディオブック、ニュース放送、または複数の音声プロフィールが順番に話すシナリオをユーザーが依頼した場合に、このモードが有効になります。
ステップごとのワークフロー
-
ユーザーのリクエストに基づいてJSONスクリプトファイルを作成します。スクリプトの形式は次のとおりです。
{ "title": "Evening News", "gap": 0.25, "lines": [ {"profile": "News Anchor", "text": "Good evening and welcome to the six o'clock news."}, {"profile": "Cheerful Girl", "text": "Thanks, Tom! I'm here live at the scene.", "instruct": "excited field reporting tone"}, {"profile": "Aiden", "text": "Well, this is actually quite common in my experience."} ] }スクリプトのフィールド:
title— 出力ディレクトリと結合ファイルの名前gap— セグメント間の無音時間(秒、デフォルト:0.25)lines— 各行に次の項目を含む、会話行の配列:profile— 既存の音声プロフィール名(一致する必要があります。完全一致または部分一致)text— 読み上げるテキストinstruct— (任意)「designed」および「custom」プロフィール用のスタイル/感情の上書き設定
-
スクリプトを一時ファイルに保存します。
cat > /tmp/my_script.json << 'EOF' { ... } EOF -
必要なプロフィールが存在することを確認します。まず
listを実行します。プロフィールがない場合は、モード2またはモード3を使って先に作成します。 -
会話コマンドを実行します。
uv run $SKILL_DIR/scripts/voicebox.py conversation /tmp/my_script.json --play重要:タイムアウトは300000msに設定してください。複数セグメントの生成には数分かかる場合があります。
オプション:
--output-dir DIR/-o DIR— セグメントと結合ファイルの保存先(デフォルト:/tmp/voicebox_{title_slug})--gap 0.5— セグメント間の間隔を上書きします(スクリプトの値より優先されます)--quality high— より高品質な1.7Bモデルを使用します--trim-silence(デフォルト)/--no-trim-silence— 各セグメントの無音部分をffmpegでトリミングします--play/--no-play— 完了後に結合結果を再生します
-
結果を報告します。スクリプトの出力から、各セグメントの長さと結合後の合計時間を示します。
良い会話スクリプトの書き方
- 行を短く保つ — 1行につき1~3文が最適です。長い独白は複数の行に分けてください。
- 感情の表現には
instructを使う — デザイン済みプロファイルでは、行ごとにデフォルトの音声説明を上書きするため、"instruct": "excited tone"または"instruct": "whispering"を追加します。 - プロファイルの種類を混在させる — 同じスクリプト内で、デザイン済みプロファイルとクローンプロファイルを自由に混在させられます。
- 間隔の調整 — 速い会話では0.15~0.25秒、ドラマチックな間では0.4~0.6秒、シーンの切り替えでは0.8~1.0秒にします。
例:ニュース放送
{
"title": "Evening News",
"gap": 0.3,
"lines": [
{"profile": "News Anchor", "text": "Good evening. Tonight's top story: a breakthrough in renewable energy."},
{"profile": "Cheerful Girl", "text": "Thanks, Tom! I'm here at the research lab where scientists made the announcement earlier today.", "instruct": "excited field reporting tone"},
{"profile": "Aiden", "text": "This discovery could fundamentally change how we think about solar power. The efficiency gains are remarkable."},
{"profile": "News Anchor", "text": "Fascinating. We'll have more on this story after the break."}
]
}
要件
--trim-silence(デフォルト:オン)には ffmpeg がインストールされている必要があります。ffmpegが利用できない場合は、--no-trim-silenceを使用してください。- スクリプト内で参照されるすべてのプロファイルが、すでに存在している必要があります。
スクリプトコマンドのリファレンス
# List all profiles
uv run $SKILL_DIR/scripts/voicebox.py list
# List available models and quality tiers
uv run $SKILL_DIR/scripts/voicebox.py models
# Create designed voice profile
uv run $SKILL_DIR/scripts/voicebox.py create-designed "Name" --desc "description" --lang en
# Create custom voice profile (preset speaker)
uv run $SKILL_DIR/scripts/voicebox.py create-custom "Name" <speaker>
# List available preset speakers
uv run $SKILL_DIR/scripts/voicebox.py speakers
# Create cloned voice profile (from existing audio file)
uv run $SKILL_DIR/scripts/voicebox.py create-cloned "Name" --audio /path/to.wav --ref-text "transcript" --lang en
# Record from microphone and clone (with known transcript)
uv run $SKILL_DIR/scripts/voicebox.py record "Name" --duration 10 --lang en --ref-text "what I said"
# Record from microphone and clone (auto-transcribe, high quality ASR)
uv run $SKILL_DIR/scripts/voicebox.py record "Name" --duration 10 --lang en --quality high
# Transcribe an audio file (built-in, no external skill needed)
uv run $SKILL_DIR/scripts/transcribe.py /path/to/audio.wav
# Transcribe with high quality ASR (1.7B model)
uv run $SKILL_DIR/scripts/transcribe.py /path/to/audio.wav --model Qwen/Qwen3-ASR-1.7B
# Generate speech
uv run $SKILL_DIR/scripts/voicebox.py generate "Name" "text" --play
# Generate with high quality (1.7B clone model)
uv run $SKILL_DIR/scripts/voicebox.py generate "Name" "text" --play --quality high
# Generate with style override
uv run $SKILL_DIR/scripts/voicebox.py generate "Name" "text" --instruct "angry" --play
# Generate a multi-speaker conversation from JSON script
uv run $SKILL_DIR/scripts/voicebox.py conversation /tmp/script.json --play
# Conversation with custom gap and no silence trimming
uv run $SKILL_DIR/scripts/voicebox.py conversation /tmp/script.json --gap 0.5 --no-trim-silence -o /tmp/my_show
# Conversation with high quality models
uv run $SKILL_DIR/scripts/voicebox.py conversation /tmp/script.json --quality high --play
# Delete a profile
uv run $SKILL_DIR/scripts/voicebox.py delete "Name"
品質ティア
すべてのTTSおよび録音コマンドは、デフォルトで --quality high(1.7B)を使用します。より高速な0.6Bモデルには --quality standard を使用してください。
| ティア | クローンモデル | ASRモデル | 必要なRAM | 速度 |
|---|---|---|---|---|
| high(デフォルト) | 1.7B(約3.5GB) | 1.7B(約3.5GB) | 約8GB以上 | 品質が高い |
| standard | 0.6B(約1.5GB) | 0.6B(約1.5GB) | 約4GB以上 | 高速、必要なRAMが少ない |
ボイスデザインでは常に1.7Bを使用します(利用可能なサイズはこれのみです)。
ユーザーが「より高速」または「より軽量」を求めた場合は、--quality standard を使用してください。
音声説明ガイド
クイックルール
- 具体的にする — 「素敵」や「良い」ではなく、「低い」「明瞭」「テンポが速い」を使います
- 複数の要素を組み合わせる — 性別+年齢+感情+話し方を組み合わせます
- 客観的にする — 好みではなく、声の特徴を説明します
- 独自性を保つ — 有名人の声まねは決して依頼しないでください
- 簡潔にする — すべての単語に意味を持たせます
良い例
"Calm middle-aged male with deep magnetic voice, medium pace, warm and trustworthy"
"Young adult female with crisp energetic tone, fast pace, cheerful and engaging"
"Senior male narrator with slow rich baritone, composed delivery, for audiobook"
"Angry adult female with sharp intense voice, fast aggressive pace, furious and commanding"
対応言語
英語(en)、中国語(zh)、日本語(ja)、韓国語(ko)、ドイツ語(de)、フランス語(fr)、ロシア語(ru)、ポルトガル語(pt)、スペイン語(es)、イタリア語(it)。デフォルトは英語です。
エラー処理
| エラー | 対応 |
|---|---|
| 一致するプロファイルがない | 利用可能なプロファイルを表示し、新規作成を提案します |
| プロファイルが存在しない | Mode 2を使った作成を提案します |
| モデルがまだダウンロードされていない | ユーザーに知らせます。初回使用時に自動でダウンロードされます(約3GB) |
| 生成に失敗する | エラーメッセージを表示し、mlx-audioがインストールされていることを確認します |
サンドボックスから uv にアクセスできない | 汎用サブエージェントでTaskツールを使用します |
初回ダウンロード
初回使用時、モデルはHuggingFaceからダウンロードされます(1.7Bの場合、各モデル約3.5GB)。スクリプトはこれを自動で検出し、次のように表示します。
First-time setup: downloading <model> (~3.5GB)...
This is a one-time download — future runs will be instant.
Claudeへの重要事項:voiceboxコマンドを初めて実行するとき(またはHFキャッシュを消去した後)は、モデルのダウンロードに初回実行で数分かかることをユーザーに伝えてください。生成、録音、文字起こしのすべてのコマンドには、300000ms(5分)のタイムアウトを設定してください。2回目以降はキャッシュから読み込まれるため、大幅に速くなります。
実装に関する注意
- 音声出力は、サンプルレート24000 HzのWAV形式です
- モデルは
~/.cache/huggingface/hub/にキャッシュされます - 初回実行時に
mlx-audioパッケージはuv経由で自動インストールされます - Bashサンドボックスが
~/.claude/skills/へのアクセスをブロックする場合は、新しいシェルを使うgeneral-purposeサブエージェントタイプでTaskツールを使用してください - 再生後に一時ファイルを削除します:
rm -f /tmp/voicebox_output.wav