Discordにテキストを大声で話させたい場合、TwitchチャットをDiscordに音声チャネルに音声をルーティングするストリーマー、タイピングを好むユーザー、またはカスタムナレーションツールを作成している開発者、テキスト音声Discordボットが最適なソリューションです。このガイドは、2026年に利用可能なすべての実用的なオプションを扱っています。ワンクリックで追加できるホストされたボット、ネイティブDiscord TTSコマンド、およびDiscord.jsとElevenLabs APIを使用してカスタムボットを構築するためのステップバイステップの説明があります。
TL;DR
- Discordのネイティブ/ttsコマンドはクライアント側です。リスナーのスピーカーで再生され、音声チャネルではなく再生されます。
- Streamcord TTSはTwitchチャットをDiscord音声チャネルで大声で読むストリーマー向けに最も人気のあるホストオプションです。
- Voicemod TTSは管理されたボットを介して奇抜でキャラクタボイスを提供します。
- カスタムDiscord.js + ElevenLabsボットは最高の音声品質と完全な制御を1時間以内のビルド時間で提供します。
- TTSコマンドをトリガーするホットキーは、Discordのキーバインド設定またはAutoHotkey などの外部ツールを通じてマップできます。
- VoxBoosterはTTSボットと組み合わせて、合成チャットナレーションとライブ変更音声の両方が必要なハイブリッドワークフロー向けです。
TTS ボットが存在する理由と実際に何をするか
Discordの組み込み/ttsコマンドはしばしば誤解されています。/tts こんにちはと入力すると、DiscordのデスクトップクライアントはオペレーティングシステムのローカルTTSエンジンを使用してあなたのスピーカーを通じてテキストを大声で読み上げます。チャネル内の他のユーザーは音声チャネルを通じてそれを聞きません。独自のDiscord TTSがオンで、クライアントがメッセージをローカルで読む場合にのみ聞こえます。
テキスト音声Discordボットは異なる方法で動作します。ボットは独自の音声チャネル接続を備えたサーバー側のプロセスです。トリガーされると、テキストから音声を合成し、オーディオを音声チャネル自体にストリーミングします。その音声チャネル内の誰もがそれを聞きます。別の参加者が話すのを聞くのと同じように。この違い、クライアント局所対チャネルブロードキャストは、このユースケースのためのボットが存在する全体的な理由です。
これが重要な一般的なシナリオ:
- **ストリーミング設定:**あなたはTwitchで生放送しており、共有しているDiscord音声通話でチャットメッセージを視聴者が大声で読まれたいです。
- **アクセシビリティ:**サーバーメンバーはマイクを使うことができない、またはしたくない。TTSボットはタイプすることで音声討論に参加できます。
- **アナウンスメント:**ボットがモデレーション警告、ロール割り当て、またはスケジュールされたメッセージを人間のオペレーターなしでチャネルに読み込みます。
- **カスタムナレーション:**開発者は、リアルタイムで高品質なAI音声を使用してゲームイベント、スコア、またはアラートをナレーションするボットを構築します。
オプション1:Discordのネイティブ/ttsコマンド
ボットに到達する前に、Discordの組み込みコマンドがニーズを満たすかどうかを確認してください。
**有効にする方法:**サーバーで、サーバー設定→概要→テキスト音声を有効にに移動します。チャネルの詳細設定で、誰でもTTSメッセージを投稿できるように設定するか、特定のロールに制限します。
**使用方法:**TTSが有効になっているテキストチャネルで、/tts [メッセージ]と入力します。DiscordはオペレーティングシステムのローカルTTSエンジンを使用してリスナーのスピーカーを通じてメッセージを読み上げます。
制限:
- オーディオは音声チャネルブロードキャストではなく、ローカルスピーカーに送られます。
- 音声品質はリスナーのOS TTSエンジン(WindowsのMicrosoft David、Ziraなど)に依存します。
- 各リスナーは、設定→アクセシビリティ→/ttsコマンドの再生と使用を許可するでTTSを有効にする必要があります。
**最適:**迅速なアクセシビリティ、または各ユーザーがテキストをローカルで読むだけでよい状況のため。ストリーミングやグループアナウンスには向きません。
オプション2:Voicemod TTSボット
デスクトップ音声チェンジャーで知られるVoicemodは、その音声ライブラリをテキスト音声機能にもたらすDiscordボットを運営しています。
提供するもの:
- 奇抜でキャラクタボイスのライブラリ(ロボット、漫画、ディープなど)。
- シンプルなスラッシュコマンドインターフェース:
/tts [voice] [message]。 - カスタム音声モデルアップロードなし。Voicemodのプリセットライブラリに限定されています。
- 無料層が利用可能です。プレミアム音声にはVoicemodサブスクリプションが必要です。
セットアップ:
- Voicemod Discord Botページにアクセスして、サーバーに追加をクリックしてください。
- 接続、話す、メッセージを読む権限を使用してボットを認可します。
- サーバーの音声チャネルに参加します。
/ttsの後に選択した音声名とメッセージテキストを使用します。
**制限:**音声選択はVoicemodのライブラリに限定されています。自然な人間の声やカスタムペルソナが必要な場合、これではカバーできません。
オプション3:ストリーマー向けStreamcord TTS
Streamcordは、Twitchチャットメッセージを音声チャネルで大声で読むストリーマー向けのテキスト音声Discordボットです。TwitchとDiscordをネイティブに橋渡しします。
提供するもの:
- TwitchチャネルをDiscord音声チャネルに接続します。
- 設定可能な音声、速度、ピッチでTwitchチャットメッセージを大声で読み上げます。
- サブスクライバーのみTTS、チャネルポイントの償却をTTSトリガーとして、メッセージフィルタリングをサポートします。
- スラッシュコマンドとダッシュボード設定。
セットアップ:
- streamcord.ioにアクセスして、Discordに追加をクリックしてください。
- 必要な権限を使用してサーバーを認可します。
/tts setupを使用し、プロンプトに従ってTwitchチャネルをリンクし、ターゲットDiscord音声チャネルを選択します。- streamcord.io/dashboardでボイス設定を構成します。
**音声チャネルルーティング:**Streamcordはセットアップ時に指定した音声チャネルに参加します。ダッシュボード経由でターゲットチャネルを変更でき、ボットを再度招待する必要はありません。チャネル間でそれに従わせるには、/tts moveコマンドを使用します。
**Streamcordのホットキー設定:**Streamcord自体には専用のデスクトップホットキーシステムがありません。ストリーマーは通常、Discordで独自のマイク用のプッシュツートークキーをバインドし、OBSまたはStreamDeckで別のキーバインドを使用してチャットコマンドをトリガーします。より詳細な制御のため、AutoHotkey スクリプトはDiscord入力をシミュレートすることでキーボード見下し経由で/ttsコマンドを送信できます。
オプション4:Discord.js + ElevenLabs APIを使用したカスタムボット
最高の音声品質と動作の完全な制御のため、Discord.js v14とElevenLabs APIを使用して独自のテキスト音声Discordボットを構築します。これにより、ElevenLabsのスタジオ品質の音声、音声クローニング、多言語合成、リクエストごとのパラメータ調整にアクセスできます。
前提条件
- Node.js 18+
- DiscordアプリケーションとボットトークンID(discord.com/developers)
- ElevenLabs APIキー(elevenlabs.io)
- FFmpegがインストールされてパスに存在します(@discordjs/voiceによるオーディオエンコーディングに必要)
ステップ1:プロジェクトを初期化する
mkdir discord-tts-bot && cd discord-tts-bot
npm init -y
npm install discord.js @discordjs/voice @discordjs/opus elevenlabs libsodium-wrappers ffmpeg-static
ステップ2:スラッシュコマンドを登録する
deploy-commands.jsを作成します:
const { REST, Routes, SlashCommandBuilder } = require('discord.js');
const commands = [
new SlashCommandBuilder()
.setName('tts')
.setDescription('音声チャネルでテキストを話す')
.addStringOption(opt =>
opt.setName('text').setDescription('話すテキスト').setRequired(true)
)
].map(cmd => cmd.toJSON());
const rest = new REST({ version: '10' }).setToken(process.env.DISCORD_TOKEN);
(async () => {
await rest.put(
Routes.applicationGuildCommands(process.env.CLIENT_ID, process.env.GUILD_ID),
{ body: commands }
);
console.log('コマンドが登録されています');
})();
node deploy-commands.jsを1回実行して、サーバーで/ttsスラッシュコマンドを登録します。
ステップ3:ボットを構築する
index.jsを作成します:
const { Client, GatewayIntentBits } = require('discord.js');
const { joinVoiceChannel, createAudioPlayer, createAudioResource, AudioPlayerStatus } = require('@discordjs/voice');
const { ElevenLabsClient } = require('elevenlabs');
const { Readable } = require('stream');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildVoiceStates] });
const eleven = new ElevenLabsClient({ apiKey: process.env.ELEVENLABS_API_KEY });
const VOICE_ID = 'your-elevenlabs-voice-id'; // 例:RachelのためのEXAVITQu4vr4xnSDxMaL
client.on('interactionCreate', async interaction => {
if (!interaction.isChatInputCommand() || interaction.commandName !== 'tts') return;
const text = interaction.options.getString('text');
const voiceChannel = interaction.member?.voice?.channel;
if (!voiceChannel) {
return interaction.reply({ content: '最初に音声チャネルに参加してください。', ephemeral: true });
}
await interaction.deferReply({ ephemeral: true });
const audioStream = await eleven.textToSpeech.convertAsStream(VOICE_ID, {
text,
model_id: 'eleven_multilingual_v2',
voice_settings: { stability: 0.5, similarity_boost: 0.75 }
});
const connection = joinVoiceChannel({
channelId: voiceChannel.id,
guildId: interaction.guildId,
adapterCreator: interaction.guild.voiceAdapterCreator,
});
const player = createAudioPlayer();
const resource = createAudioResource(Readable.from(audioStream));
player.play(resource);
connection.subscribe(player);
player.on(AudioPlayerStatus.Idle, () => connection.destroy());
await interaction.editReply({ content: 'しゃべっています。' });
});
client.login(process.env.DISCORD_TOKEN);
ステップ4:環境変数を構成する
.envを作成します:
DISCORD_TOKEN=your_bot_token
CLIENT_ID=your_app_client_id
GUILD_ID=your_server_id
ELEVENLABS_API_KEY=your_elevenlabs_key
node index.jsを実行し、サーバーの音声チャネルに参加して、/tts これは私のカスタムTTSボットですと入力します。
音声モデルを選択する
ElevenLabsは2026年にいくつかのモデルを提供しています:
| モデル | レイテンシ | 品質 | 言語 |
|---|---|---|---|
| eleven_turbo_v2_5 | ~250ms | 良好 | 32 |
| eleven_multilingual_v2 | ~400ms | 優秀 | 29 |
| eleven_flash_v2_5 | ~75ms | 良好 | 32 |
リアルタイムDiscordの使用については、eleven_flash_v2_5はコマンドと音声の間の遅延を最小限に抑えます。品質第一のナレーション用には、eleven_multilingual_v2がより良い選択です。
音声チャネルルーティング:実用的なパターン
使用するボットに関係なく、音声チャネルルーティングは同じ基本的なパターンに従います。
**ユーザーパターンに従う:**ボットはコマンドが使用される時点で呼び出しユーザーが現在いる音声チャネルに参加します。これはほとんどのボットのデフォルトであり、上記のDiscord.js例の実装です。事前設定は不要です。
**固定チャネルパターン:**ボットの設定で特定のチャネルIDを指定します。ボットは常にそのチャネルで話しており、呼び出しユーザーがどこにいるかに関わらず話します。アナウンスメントボットまたはTTS部屋に最適です。
**マルチチャネルパターン:**異なるテキストチャネルが異なる音声チャネルにマップされるより複雑なセットアップ。Discord.jsでは、チャネルマッピングオブジェクトを使用して実装し、ソーステキストチャネルからターゲット音声チャネルを解決します。
**動的フォローパターン:**ボットはvoiceStateUpdateイベントを監視し、指定されたユーザーをフォローして音声チャネル間を移動します。セッション中に頻繁にルームを切り替えるストリーマーに役立ちます。
TTSコマンド用ホットキー設定
ほとんどのTTSボットはスラッシュコマンドによってトリガーされ、ホットキーではありません。しかし、いくつかのアプローチで効果的なホットキーワークフローを作成できます。
**Discordの組み込みキーバインド:**Discord設定→キーバインドに移動します。ここでは任意のテキストコマンドをバインドすることはできません。プッシュツートーク、デアフン、ミュート、および同様のDiscordアクションのみ。TTSの場合、キーバインドは直接適用されません。
AutoHotkey(Windows):/tts [プリセットメッセージ]コマンドを入力して、Discordウィンドウで入力を押すホットキーをマップできます。
^F1:: ; Ctrl+F1
WinActivate, Discord
Send, /tts プリセットメッセージをここに記入{Enter}
return
**StreamDeck:**Elgato StreamDeckを使用する場合、「テキスト」アクションはアクティブなウィンドウにキーストロークを送信できます。StreamDeckボタンを設定してDiscordテキスト入力を集中させ、/ttsコマンドを入力します。これはライブストリーミングシナリオではAutoHotkey よりも高速で信頼性が高いです。
**ボット側のホットワード:**カスタムボットの場合、スラッシュコマンドの代わりにテキストチャネル内でプリフィックストリガーを実装できます。指定されたチャネル内の設定されたプリフィックスで始まるメッセージは自動的にTTSに送信されます。これにより、すべてのメッセージがホットキーなしTTSトリガーになります。
ハイブリッドワークフロー:TTSボット+ライブ音声モディファイア
TTSボットはテキストから合成音声を処理します。マイクには触れません。つまり、TTSボットとVoxBoosterのようなライブ音声モディファイアは同じ音声チャネルで競合なく共存します。
ストリーマー向けの実用的なハイブリッド設定:
- Streamcord TTSはTwitchチャットメッセージを、Co-Streamersが参加しているDiscord音声チャネルで大声で読みます。
- VoxBoosterはエフェクト、クローンボイス、またはノイズサプレッションで、リアルタイムで本物のマイク音声を変更します。
- Co-Streamersは両方を聞きます。TTSボットが視聴者メッセージを話し、変更されたライブ音声が聞こえます。
2つのオーディオストリームは独立しています。TTSボットは独自の接続からオーディオを生成します。マイク音声はVoxBoosterの仮想デバイスを通過してDiscordに到達します。Discordはチャネル内の2つの参加者をミックスするのと同じ方法で混ぜます。
このハイブリッドアプローチは、視聴者やCo-Streamersに何もDiscord以上にインストールしないで、より豊かなオーディオ環境を望むコンテンツクリエイターに特に効果的です。
トラブルシューティングの一般的な問題
**ボットが参加しますがオーディオを生成しません:**FFmpegがパスに存在し、@discordjs/opusが正常にインストールされていることを確認します。ターミナルでffmpeg -versionを実行して確認します。opusが不足している場合は、npm rebuild @discordjs/opusを試してください。
**TTSコマンドのレイテンシが長い:**ElevenLabs APIレイテンシは、選択したモデルと入力テキストの長さに依存します。eleven_flash_v2_5に切り替えて遅延を低下させます。~200文字より長いメッセージの場合、送信前にテキストを分割することを検討してください。
**ボットが再生中に切断します:**これは通常、音声接続タイムアウトです。connection.on('error')ハンドラーを追加し、失敗時に再接続します。サーバーがポート443(Discordの音声プロトコル)での安定した送信UDP接続性を持っていることを確認します。
**Streamcord TTSはすべてのメッセージを読みません:**Streamcordはデフォルトで特定のメッセージタイプをフィルタリングします。フィルタの下のStreamcordダッシュボードを確認して、非サブスクライバーメッセージを許可し、必要に応じてコンテンツフィルタリングを無効にします。
**Discord /ttsコマンドが機能していません:**TTSがサーバー設定で有効になっているか、特定のチャネルがTTSを許可しているかを確認します。個別ユーザーは、独自のDiscordアクセシビリティ設定でTTS再生を有効にする必要があります。
要約
2026年には、テキスト音声Discordボットの設定に2分(StreamcordまたはVoicemod)から1時間未満(カスタムDiscord.js + ElevenLabs)かかります。正しい選択肢は、音声品質の要件、必要なカスタマイズ量、独自のサーバーまたは本番ストリーミング設定を構築しているかどうかによって異なります。ネイティブDiscord /ttsはボットなしで基本的なクライアント側の再生をカバーします。Streamcordのようなホストされたボットはストリーマーのユースケースを最小限のセットアップでカバーします。ElevenLabsを使用したカスタムDiscord.jsボットは、スピーチのすべての側面に対する完全なプログラム的制御を備えたスタジオ品質のAI音声を提供します。
最も汎用的なストリーミングオーディオセットアップのため、チャットナレーション用TTSボットをライブ音声モディフィアと組み合わせて、2つのツール、1つの音声チャネル、ゼロの競合を実現します。