Communityコーディング&開発github.com

orange9angel/dula-voice

アニメーション短編の全セリフを、話者ごとに一貫性を保ったキャラクターボイスで生成します。火山エンジン Seed-Audio キーを使用し、環境音や効果音も生成可能。キャラクターボイス、会話音声、声優、環境音、効果音にご利用ください。

dula-voice とは?

このスキルは、火山エンジン Seed-Audio の API キーを使ってアニメーション短編の全セリフ音声を生成するためのものです。各キャラクターの声に一貫性を持たせることができ、セリフ以外に環境音や効果音の生成にも対応します。`config/film.json` で各キャラクターの声の特徴を `desc` フィールドに記述し、さらにセリフごとに `delivery` で話し方を指定することで、細かな演技のニュアンスを反映できます。最初のセリフが生成された後は、その声をリファレンスとして以降のセリフに自動適用するため、声質の一貫性が維持されます。`configure.py` による API キー設定は対象者の端末上で安全に行う必要があり、キーそのものが会話内で漏洩しないように注意します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/orange9angel/dula-craft/tree/HEAD/skills/dula-voice

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ボイス

スクリプトのパスはこの SKILL.md からの相対パスであり、speak.py はフィルムフォルダから実行されます。この手順はオプションです。録音や他のツールからの音声も同様に機能します。それらを audio/voice/<line id>.wav に配置するか、行に file を設定してください。

相手の言語で話しかけてください。

キーの設定(一度だけ)

費用は相手自身のアカウントに請求されます。相手に自分のターミナルでこれを実行するよう依頼してください:

python <dula-start フォルダ>/scripts/configure.py

Claude Code では、! python <path>/configure.py と入力してもらうことができます。

**会話の中でキーを尋ねたり、~/.dula-craft/config.env を読んだり表示したりしないでください。**設定されているかどうかを確認するには、configure.py --status を使用してください。誰かが会話内にキーを貼り付けた場合は、コンソールでキーを失効させて新しいものを作成するように伝えてください。

声のデザイン

config/film.json のトップレベルに voices を追加します:

"voices": {
  "mochi": {"desc": "8歳くらいの男の子、明るく活発、テンポが速く、軽い息づかい"},
  "gran": {"desc": "70歳の女性、温かくややハスキー、ゆっくりで非常に明瞭な発音"}
}

行には delivery を設定できます:

{"id": "l03", "who": "mochi", "text": "ほ、本当?", "delivery": "驚きと喜び、最初の単語で震え、最後に向かって上がる"}

オプションの音声フィールド:lang で言語を設定(デフォルトは行の言語)、speaker で公式の火山エンジン音声 ID を設定、reference で権利を持つ参照音声を指定できます。

desc と delivery は英語、または行の言語で記述してください。声そのもの(年齢、緊張感、息づかい、テンポ、重み)を説明してください。「嬉しい」だけでは声は変わりません。「特定の俳優やキャラクターのように聞こえる」とは書かず、有名なキャラクターや実在の人物を模倣する声を選ばないでください。声にも肖像権や著作権のリスクがあります。

生成

python <このフォルダ>/scripts/speak.py --dry-run   # 料金が発生せずにプロンプトを確認
python <このフォルダ>/scripts/speak.py

各キャラクターの最初の行は、その後の行の音声リファレンスになります。**最初の行の音声を最初に聞いてください。**適切でない場合は、desc を変更してやり直してください。最初の行を変更した後は、--only を使用してそのキャラクターの後続の行を新しい声に合わせてやり直します。

行や声を変更して再度実行すると、変更された部分だけが再生成されます。

環境音と効果音

python <このフォルダ>/scripts/speak.py --sound "静かな古い部屋、時々遠くで鳥の声" --seconds 10 --out audio/sfx/room.wav

**必ず --seconds を指定してください。**課金は長さに基づくため、指定がないとクリップが30秒以上になることがあります。これはおおよその値であり、非常に短いリクエストは長く返ってくる傾向があります。生成されたクリップはしばしば音量が小さいため、film.json に level_db を指定してストーリーのサウンドのレベルを調整してください(film.json のリファレンスを参照)。

一度に1つずつ生成してください。セリフ、効果音、音楽をまとめて1つのプロンプトでリクエストしないでください。レベルを個別に調整できず、口の動きが合わなくなります。

結果の確認

  • 可能であれば聞いてください。聞けない場合は、「この音声は耳で確認されていません」と相手に伝えてください。
  • 自分でできること:長さが妥当かどうか確認してください(短いセリフで5秒は問題です)。Whisper などの文字起こしツールが利用可能な場合は、テキストをスクリプトと比較してください。非常に小さな単語が欠落している場合があり、それは再実行のサインです。
  • delivery はリクエストであり、正確な制御ではありません。特にポーズの長さは信頼できないため、テンポがおかしい場合はセリフを短くするか再生成してください。
  • 同じプロンプトでも毎回異なる結果が得られるため、エラーが発生した場合は再生成してください。

よくある問題

症状修正方法
Key rejected, or Audio Generation 1.0 is not enabledサービスが有効になっているか確認してください。キーは音声コンソールからのものでなければならず、Ark キーは機能しません
単語が誤って読まれる再生成するか、セリフを言い換えてください
セリフが一人の人間のように聞こえない最初のセリフが正しいことを確認し、--only で後続のセリフをやり直すか、speaker を設定してください
セリフの終わりが切れるより遅い delivery をリクエストするか、再生成してください

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル