😇

音声合成に想いを馳せてAIと会話してみる

に公開

はじめに

「コンピューターが人間のように話す」—— 数十年前には夢物語だったこの技術が、今では月数百円で誰でも利用できる時代になりました。

リモートワークで一人の時間が増えた昨今、ふと「AIと音声で喋りテェ!」と思い立ち、実際に作ってみました。開発を進めながら、音声合成技術の進歩と、それを取り巻く世界の変化について考えずにはいられませんでした。

作ったもの

STT(Speech-to-Text)とTTS(Text-to-Speech)を組み合わせた、言ってみれば「おしゃべりAI」です。音声認識で私の独り言…じゃなくて入力を受け取り、賢いGeminiさんがそれに応え、最後はイケボ(だったり萌え声だったりする)で返してくれる、そんなろくでもない(そしてちょっとシュールな)アプリです。

今回作成した、笑いと涙の結晶であるリポジトリはこちらになります。
https://github.com/takemo101/stt-tts-talk

デモ動画

実際に音声でAIと対話するシュールな様子を動画でご覧ください。

https://youtu.be/RRVlMRCGK_Q

技術スタック

実装

セットアップ

今回は、uvでプロジェクトを作成しています。
以下のコマンドで必要なライブラリをインストールしてください。

uv add google-genai speechrecognition pyaudio sounddevice soundfile python-dotenv

コアコンポーネント

このアプリは以下の3つのコアコンポーネントで構成されています。

1. 音声認識:SpeechRecognizer

SpeechRecognitionライブラリを使って音声入力をテキストに変換します。
音声入力中の効果音再生や、音声認識の結果を出力するためのインターフェースを実装して、SpeechRecognizerクラス上で統一的に扱えるようにしています。

https://github.com/takemo101/stt-tts-talk/blob/2447d639e97f693d01ed63e04d5f21a2b438a95d/stt/speech_recognition.py#L1-L74

2. AIチャット:AIChat

Gemini APIを使ってAIとの対話を行います。
AIChatクラスに、システムプロンプトやキャラクターごとの設定を組み込んでいます。

https://github.com/takemo101/stt-tts-talk/blob/f0001a1cfe002cd10bafec9052bbe613b8a3ae88/stt/ai_chat.py#L1-L52

3. 音声合成:VoiceClient

複数の音声合成エンジンを抽象化して統一インターフェースで利用する設計にしています。
今回は、Google Gemini TTSとにじボイスの2つの実装を用意しました。

https://github.com/takemo101/stt-tts-talk/blob/f0001a1cfe002cd10bafec9052bbe613b8a3ae88/stt/voice.py#L4-L22

にじボイス実装
https://github.com/takemo101/stt-tts-talk/blob/f0001a1cfe002cd10bafec9052bbe613b8a3ae88/stt/nijivoice.py#L1-L62

Google Gemini TTS実装
https://github.com/takemo101/stt-tts-talk/blob/f0001a1cfe002cd10bafec9052bbe613b8a3ae88/stt/googlevoice.py#L1-L90

その他

コントローラー:TalkController

音声認識, AIチャット, 音声合成 の各コンポーネントを統括するコントローラーを作成し、メインループで音声認識からAI応答生成、音声合成までの一連の流れを制御しています。

https://github.com/takemo101/stt-tts-talk/blob/f0001a1cfe002cd10bafec9052bbe613b8a3ae88/stt/talk.py#L1-L69

キャラクタープロンプト設定

システムプロンプトでキャラクター応答内容を制御しています。
そして、キャラクターごとの設定プロンプトをシステムプロンプトに組み込むことで、AIの応答をキャラクターごとに変えることができます。

マジでゴミみたいなプロンプトですみません

https://github.com/takemo101/stt-tts-talk/blob/f0001a1cfe002cd10bafec9052bbe613b8a3ae88/stt/config.py#L12-L82

音声合成技術への想い

驚くべき低価格化

このアプリを作りながら改めて驚いたのは、音声合成技術の価格破壊です。

  • Google Gemini TTS: Gemini APIの音声機能として提供(実質的に格安)
  • にじボイス: 月額数百円から高品質な音声合成が利用可能

「にじボイス」は初めて使ったのですが、その圧倒的な表現力に驚きました。
ただテキストを読み上げるだけでなく、AIが文脈を解釈して自動で感情を乗せてくれるんです。

冨田勲が見た未来

音声合成の話になると、どうしても思い出すのが電子音楽の巨匠・冨田勲先生のことです。

1970年代、富田先生はモーグシンセサイザーを駆使して人間の声を合成しようとしましたが、限界がありました。パ行を発音させるのがやっとで「パピプペポ…」としか聞こえなかったため、当時「パピプペ親父」と呼んでいたとか...
そして時代が進み、2012年初演の「イーハトーヴ交響曲」で初音ミクをソリストとして起用するくらい、音声合成に情熱を注いでいました。

https://youtu.be/QYJ1sW6RgdQ?si=8WoghBuhRgEdOSGU

もし、冨田先生が現在の音声合成技術やAI技術を見たら、どんな感想を持たれたでしょうか?

きっと、新しい表現の可能性に心を躍らせたのではないでしょうか...

最近はAIが歌ったり、流暢に喋ったりするのが当たり前の光景になりましたが、ふと、生きておられたらどんなにか喜ばれただろうかと、感無量になってしまいます。

まとめ(そして伝説へ...)

開発を通じて、実際に音声でGeminiと対話していると、不思議な感覚に包まれました。
相手が人工知能だと分かっていても、音声でのやり取りには人間らしさを感じるのです。

人間の定義って一体何なのでしょうか?
知性を持つこと?
感情を持つこと?
それとも猫を愛でることでしょうか?

知性を持った動物を人間と定義するのであれば、肉体が無いだけで、AIもまた「人間らしい」存在になり得るのかもしれません(思想強すぎ!)

冗談はさておき、冨田勲さんが1970年代に夢見た「機械に魂を込める」世界は、今まさに現実となりつつあります。

想像してみてください。数年後の世界を──

  • 朝起きると、AIアシスタントがあなたの声のトーンから体調を察知し、最適な一日の過ごし方を提案してくれる。
  • 仕事では、言語の壁を気にすることなく世界中の人々と自然に対話できる。

そんな未来への第一歩が、月数百円で誰でも踏み出せる時代になったのです。

株式会社ソニックムーブ

Discussion