英語の勉強で一番難しいのは「話す練習」だと思っています。
読む・聞くはひとりでできる。書くもなんとかなる。でも話すとなると、相手が必要になる。英会話アプリはたくさんあるし、オンライン英会話も選択肢としてはある。ただ、「気が向いたときにすぐ話せる、ローカルで動く相手」が欲しかった。
そういう動機で作ったのが、このツールです。
できたもの
マイクに向かって話すと、AI が音声で返してくる——それだけのものです。
裏では3つのコンポーネントが動いています。
マイク → SenseVoiceSmall(STT)→ Claude → Kokoro(TTS)→ スピーカー
話すのをやめてしばらく無音が続くと「発話が終わった」と判断して認識が走る。テキストに変換されたら Claude に送って返答をもらい、それを Kokoro が音声に変換して再生する。この繰り返しです。
対応言語は英語・日本語・中国語・韓国語の4つ。それぞれ音声認識も読み上げも対応しています。
使ったもの
SenseVoiceSmall(音声認識)
FunAudioLLM が開発した音声認識モデルです。Whisper より高速で、日本語・中国語・韓国語・英語・広東語に対応しています。RTX 3080 で動かしたところ、体感では発話終了から 1 秒以内に認識結果が出てきます。
Claude(LLM)
会話の相手部分です。API キーを直接使うのではなく、Claude Code の CLI(claude -p)をサブプロセスで呼び出す形にしました。これで認証まわりを気にせず使えます。
システムプロンプトで「英語のみで返して」「短く答えて」「文法ミスは最後に優しく指摘して」といった指示を入れています。
Kokoro-82M(音声合成)
82M パラメータの軽量 TTS モデルです。英語・日本語・中国語・韓国語・フランス語・イタリア語などに対応しています。日本語の声は複数あって、jf_gongitsune が一番自然に聞こえました。
起動方法
# 英語会話練習
python main.py --input-device 1 --language en
# 日本語
python main.py --input-device 1 --language ja
# 中国語
python main.py --input-device 1 --language zh
# 韓国語
python main.py --input-device 1 --language ko
--input-device はマイクのデバイス番号です。接続しているマイクが複数あるとき用です。
声を変えたいときは --voice で指定できます(日本語の場合は jf_alpha、jf_nezumi、jf_tebukuro、jm_kumo が選べます)。
技術的なポイント
無音検出で発話区切り
ずっとマイクを開きっぱなしにして、音量が閾値を下回った状態が一定時間続いたら「発話終了」と判断しています。sounddevice で 30ms ブロックごとに RMS を計算して判定しています。
デフォルトの閾値は 0.015。環境によっては拾いすぎたり拾わなかったりするので、--threshold 0.008 のように調整できます。
AI が話している間はマイクを止める
Kokoro が音声を再生している間は認識を一時停止しています。そうしないと、AI 自身の声を拾ってしまってループが発生します。is_speaking フラグで制御するだけですが、これがないと混乱します。
会話履歴の管理
Claude に送るプロンプトに過去の会話ログを全部詰め込んでいます。claude -p でサブプロセス呼び出しをしているので、セッションをまたいで記憶を持てないのですが、1回の起動中は文脈を持ってやり取りできます。
使ってみて
英語モードで話してみると、ちゃんと英語で返ってきます。文法を間違えると「ちなみに、その表現は〜と言うとより自然ですよ」と最後に添えてくれるのが、なかなか良かったです。
日本語モードの Kokoro の読み上げは、英語と比べるとまだイントネーションがやや単調な印象があります。フランス語・ドイツ語・イタリア語も試してみたかったのですが、SenseVoiceSmall がヨーロッパ言語に対応していないため、STT 側を Whisper に変える必要があります。
音声認識の精度は思ったより高くて、普通に話した英語はほぼ正確に拾えていました。背景にノイズがあるときは閾値調整が必要でした。
とりあえず「いつでも話せる会話相手」としては十分に使えるものができました。
依存関係のインストール
pip install funasr kokoro sounddevice soundfile numpy
Claude Code が入っていれば、それ以外の認証設定は不要です。
GitHub: margaret-research/voice-conversation-practice
コードは MIT ライセンスで公開しています。