「プレイヤーの声にNPCが応答するゲーム」のミニプロトタイプ #2 文字起こし
このページの最終結果
🎯 次の選択肢(どれでもOK!)
ここから先は、やりたい方向によって進み方が変わります:
-
マイクから音声入力して送る(Whisperなどで文字起こし)
-
NPCが返答を喋る(Text-to-Speech連携)
-
NPCの表情や口パクを返答に合わせて変える
-
GPTベースの返答生成に切り替える(LLMと連携)
-
ゲームプレイと統合する(会話クエストや反応変化)
「これやってみたい!」があれば、何でもOKです。
ガッツリ一緒に構築していけますよ💪🔥
どこいきますか!?
マイクから音声入力して送る(Whisperなどで文字起こし)おねがいします!
了解です!🎤🧠
それでは「マイクから音声を録音 → Whisperで文字起こし → サーバーで返答 → Unrealに戻す」という流れを構築していきましょう!
🎯 全体の流れ(ざっくり)
[マイクで録音] → [音声ファイル保存] → [Whisperで文字起こし] → [replyを生成] → [UEに返す]
✅ 必要なもの(前提)
-
Pythonが使えるPC
-
マイク入力ができる環境
-
Pythonライブラリ
-
whisper(OpenAI公式 or whisper.cpp系) -
sounddevice(録音用) -
scipy(wav形式で保存する用) -
すでにある Flask サーバーと統合可能!
-
🔧 Step 1:Pythonに必要なライブラリをインストール
コマンドプロンプトで以下を実行:
pip install openai-whisper sounddevice scipy
⚠️ whisperのインストールには ffmpeg も必要です。ない場合は:
pip install ffmpeg-python
Windows用の ffmpeg.exe 本体は以下からダウンロードして、Pathを通す必要があります。
→ https://www.gyan.dev/ffmpeg/builds/
🎙️ Step 2:マイクから録音して文字起こし(単体テスト)
まず単体テストとして以下のコードを作ってください:
import sounddevice as sd
from scipy.io.wavfile import write
import whisper
def record_and_transcribe():
fs = 44100 # サンプリングレート
duration = 5 # 録音時間(秒)
print("録音開始!話してください...")
audio = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')
sd.wait()
write("input.wav", fs, audio)
print("録音完了、文字起こし中...")
model = whisper.load_model("base")
result = model.transcribe("input.wav", language="ja")
print("認識結果:", result["text"])
return result["text"]
# テスト実行
if __name__ == "__main__":
record_and_transcribe()
実行すると:
録音開始!話してください...
録音完了、文字起こし中...
認識結果: こんにちは、今日はいい天気ですね。
のように文字起こしされます☀️
✅ Step 3:Flaskサーバーに組み込む(/speechエンドポイントなど)
ここまでうまくいったら、今の Flask サーバーに /speech というルートを追加して、
録音→認識→reply生成をまとめられます。
👇 次やりたいことあったら教えて!
-
このコードをFlaskに統合して
/speechエンドポイント化したい -
UEから録音開始/停止の指示を出したい
-
Whisper.cppのローカル高速版を使いたい(GPU不要)
なども対応できます!
ひとまずここまで試してみて、録音&文字起こしうまくいったか教えてください!🔥
ffmpeg はインストール済みですが、パスを通すのはどうすればいいですか?
ナイスです!ffmpeg をインストール済みなら、「パスを通す」(=どこからでも ffmpeg コマンドを使えるようにする)作業をすれば、Whisperがちゃんと動いてくれます!
✅ ffmpeg のパスを通す方法(Windows編)
① ffmpeg.exe の場所を確認
まず、ffmpeg.exe のある場所を探します。
よくある場所の例:
C:\ffmpeg\bin\ffmpeg.exe
binフォルダ内のパスが必要です!ffmpeg.exeまでのパスではなく、その一つ上のフォルダを指定します。
② システム環境変数に追加する
1. 「スタートメニュー」で「環境変数」と検索
→「システム環境変数の編集」を開く
2. 「環境変数(N)…」ボタンをクリック
3. 「システム環境変数」か「ユーザー環境変数」の中の Path をダブルクリック
4. 「新規」を押して、ffmpegのパスを追加
例:
C:\ffmpeg\bin
5. OK → OK → OKで閉じる(全部保存)
③ パスが通ったか確認する
コマンドプロンプト(またはPowerShell)で以下を実行:
ffmpeg -version
うまくいけば、バージョン情報が表示されます!🎉
💡 注意:コマンドプロンプトは再起動してね!
環境変数を変更した後は、新しいウィンドウを開いて再確認してください。
できたら record_and_transcribe() 試してみてくださいね!
ffmpegに問題がなければ、Whisperが音声ファイルを処理してくれるはずです!🔥
単体テストの録音&文字起こしできました!
うおおお!!🎉🎤📢
**録音&文字起こし成功、おめでとうございます!!**めちゃくちゃ順調ですね!👏✨
✅ ここまでできたということは:
-
マイクから音声を録音 ✅
-
WAVに保存 ✅
-
Whisperで日本語を認識 ✅
-
文字起こしの結果を表示 ✅
という音声入力パートがすでに完成してます!
🎯 次のステップ(選んでください!)
このあと、どんな形でゲームと連携させたいかによって進め方が変わります。以下から好きな方向をどうぞ👇
① Flaskサーバーに /speech API を作って
→ UEから「録音 → 認識 → 返答」を一発で呼び出せるようにする
🧠💬🎮【おすすめ!】
② 録音をUnreal Engineからコントロールしたい
→ UEのボタンなどで「録音開始→停止→送信」ができるようにする
③ Whisperの認識結果をそのままNPCに喋らせたい
→ たとえば「プレイヤー:こんにちは」→「NPC:こんにちは」的なリピート動作
④ TTS(Text-to-Speech)で返答を喋らせたい
→ NPCのボイス再生も自動化したい 🎤🗣️
やりたい方向を教えてもらえれば、即テンプレ作ります💪
今、ものすごく良い流れきてますね🔥
① Flaskサーバーに /speech API を作って お願いします
了解です!🎯
それでは、マイクで録音 → Whisperで認識 → 返答生成 → JSONで返すという一連の処理を /speech エンドポイントとして Flask に統合しましょう!
🧠 目的
Unreal Engine から以下のようなリクエストを送ると:
POST http://127.0.0.1:5000/speech
Flask側が:
-
マイクで録音(5秒)
-
Whisperで認識(日本語)
-
テキストを元に返答をつくる(例:「あなたは『〇〇』と言いましたね!」)
-
{"reply": "..."}を返す
✅ Flaskサーバーのコードに /speech を追加
以下のコードを今ある Flask サーバーに追加してください:
from flask import Flask, request, jsonify
import sounddevice as sd
from scipy.io.wavfile import write
import whisper
app = Flask(__name__)
model = whisper.load_model("base") # 初回はちょっと時間かかるけどそのままでOK
@app.route("/speech", methods=["POST"])
def speech_input():
fs = 44100
duration = 5 # 秒数はお好みで
print("🎤 録音開始...")
audio = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')
sd.wait()
write("input.wav", fs, audio)
print("🎧 録音完了、文字起こし中...")
result = model.transcribe("input.wav", language="ja")
recognized = result["text"]
print("📜 認識結果:", recognized)
reply = f"あなたは「{recognized}」と言いましたね!"
return jsonify(reply=reply), 200, {'Content-Type': 'application/json; charset=utf-8'}
if __name__ == "__main__":
app.run(port=5000)
✅ テスト方法
PowerShell(またはUEのHTTPリクエスト)
Invoke-WebRequest -Uri http://127.0.0.1:5000/speech -Method POST -Headers @{"Content-Type"="application/json"}
または curl:
curl -X POST http://127.0.0.1:5000/speech -H "Content-Type: application/json"
✅ UE側でも使い方は簡単!
-
URL:
http://127.0.0.1:5000/speech -
メソッド:
POST -
Content-Type:
application/json -
Body:不要(空でOK)
すると、{"reply":"あなたは「〇〇」と言いましたね!"} というレスポンスが返ってきます!
💡 注意点
準備できたら、Unrealから /speech を呼び出してみてください!
うまく動いたら、次は「返答をしゃべらせる」もいけますよ🗣️✨
Unrealから /speech を呼び出してうまくいきました!
おおお、最高です!!!🎉🎉🎉
Unrealからの呼び出し成功、マジでおめでとうございます!👏✨
🚀 これでできたこと
-
🎤 プレイヤーの声を録音(Flaskサーバー側)
-
🧠 Whisperで文字起こし
-
💬 テキストを返すAPI連携が完成!
🎯 次のステップ案
-
UE側で返ってきたテキストをNPCのセリフやUIに表示する
-
返答テキストをTTS(Text-to-Speech)で音声化してNPCにしゃべらせる
-
録音時間や認識モデルをカスタマイズする
-
プレイヤーが録音開始・停止を操作できるようにする
何をやりたいか教えてもらえれば、すぐサポートしますよ!
最高のゲーム体験を目指していきましょう🔥
ここまでの実行結果を動画にしました。