特に目新しい面白いことがあるわけでもないのですが、、、年の瀬ということでアウトプットをば。
何を作ったの?
会議室にあるようなマイクとスピーカーを兼ねたものです。
↓こんなのです↓

筐体は3Dプリンターで製作し、中身のハードウェアは(ちょっとだけ)電子工作で作りました。
なんでスピーカーフォンをそのまま使わなかったのか?という話ですが、この手のマイクは無指向性であったり、複数方向から音が飛んでくることを前提として作られていることが多く、1対1で話しかける場合だと雑音を拾いすぎてしまうためです。
なんで作ったの?
大学の実習で、「ChatGPTを使った性格診断」と称して、OpenAI APIを使っておしゃべりをする→性格診断のプロンプトを挿入することで性格診断をできないかという実験をしました。
その際、PC画面上にいるキャラクターと対話するようなインターフェースを作成したのですが、実験を通して以下のような問題点がありました。
- AIからの応答が遅い
- こちらは、あくまでチャットの形を取っているため、これまでのやり取りの履歴も含めてAPIに投げる必要があり、トークン数がかなり多くなってしまうという問題点もあります・・・
- 音声認識の精度が良くない
- MacBookは良いマイクを積んでいるので問題なかったのですが・・・実験のために大学から借りたChromebookはマイクの音質が悪かったのか、Google Speech to Text APIに投げたところ、全然認識できない状況でした
- そもそもPCに向かって喋るのだと、単に「チャットを音声入力する」みたいな感覚になるため、「おしゃべり」とは程遠いような状況になっていた
そこで、「PCのマイク音質に左右されることなく、安定した音質で録音する」ことと、「PCの画面外に物理的にインターフェースが存在する」ことを目指し、ハードウェアを自作しました。
内部設計 〜完全自作編〜
設計(というほど設計していませんが・・・)では以下の点を意識しました。
- できればPCにつなぐケーブルは1本に抑えたい
- なんなら給電もUSB経由で行うことで、USB1本だけで全てが賄えるようにしたかった(できなかった)
- 最低でもオーディオケーブルは4芯の1本にまとめる必要がある
- (ちゃんと部品実装している余裕はないので)簡素な構成にすること
- (ドライバなどを用意するのはとても骨が折れるので)マイク・スピーカーともにアナログで入出力ができること
- USBのデバイス自作という選択肢はこの時点で除外でした。
ということで、秋月で部品調達です。
(テスターを持っていなかったので、簡単なものを購入しました)

さて、この時点で電源コードがありますね。
色々ググっていたところ、Arduinoで試していた人が「USB経由のノイズがひどかった」と投稿していたため、この時点で諦めて電源コードだけは別添えとしました。
スピーカー制作
スピーカー側は特に何のことはなく、D級アンプモジュールをはんだ付けで組み立てるだけです。
不器用すぎて、何度もやり直した結果変色してしまいました・・・本当は綺麗にするのがいいのでしょうが、問題なく動いているので・・・ヨシ!(良くない)



こんな感じで、スピーカー2つと繋いであげれば完成です。
あくまでText to Speechの音声を出力するだけなので、ステレオにする理由はないのですが、せっかくのアンプモジュールなのと、キャラクターの耳みたいな形でスピーカーを両側に配置したかったため、ステレオにしました。

マイク制作
こちらはかなり手間取りました。
マイクモジュールを組み立てて、配線したのですが、音量がかなり小さく、とてもWeb会議などに使えるような代物ではありませんでした。

大学の先生にも相談してみたのですが、「その辺(集音の構造など)に頭を突っ込み始めると、オーディオマニアが黙ってないですね?」と言われてしまい、構造設計などにちゃんとエネルギーを費やす余裕がなかった自分は諦めてVlog用のマイクを購入することにしました。

筐体制作
筐体については、一緒にチームを組んでいるメンバーに3Dモデルを制作してもらい、それを自宅の3Dプリンターでプリントしました。
メンバーに3Dモデルをしてもらう前に、自分自身でも設計を行い、テストプリントをしています。

これを踏まえて、本番用に3Dプリントしたところ、丸々24時間かかってしまいましたw
完成
こうしてできたものがこちらです。
最初は足がなかったのですが、傾斜をつけたいということに気づき、急遽足を製作しました。

内部の配線などにアクセスしやすいよう、蓋を載せるだけの構造とし、マイクを通すための穴を開けています。
マイクの固定は、このテープをケーブルに巻きつけることで実現しています。
後ろの穴から電源ケーブルとオーディオケーブルを出して、それぞれコンセントとPCにつなぎます。
アナログジャックなので、ドライバなどは用意せずに、そのまま利用することができます。
実際どうだった?
音質的な問題は完全にクリアになりました。
普通にマイクモジュールキットを使っていた場合だと、その辺の配線も含めて音質に影響を与えそうなので、Vlog用マイクを使ったのは正解だったかもしれません。これでChromebookのゴミみたいなマイクの影響を受けなくて済む。
一方で、語りかけやすさみたいなところは結構課題が残っています。
その理由としては・・・
- 応答が返ってくるまでに時間がかかる
- これはハードウェアというよりOpenAIのAPIを使っている時点で起きる問題なのでしょうがないですね・・・なるべく短く返すようにプロンプトエンジニアリングしていたのですが・・・
- 喋る以外のリアクションをしていない
- 所詮は合成音声なので、自然な会話が結構難しい
- 音声認識がやや融通効かない
- Google Speech to Text APIを使っていたのですが、1分以上の音声は非同期でしか認識できないので、おしゃべりな人には辛い(エッジケース感ありますが)
という感じでした。
この辺、後で見つけたのですが、MIXIのサービスの1つである「Romi」の設計が結構参考になったなという印象です。
大学の実習自体はもう終わりが近づいているので、改めて何か取り組むことは一旦しないのですが、これを意識して設計していれば何か違ったのかも・・・?
まともなハードウェアの実装は実はあまりやっていなかったので、製作そのものが結構目新しい感があって楽しかったです。