音声を聞き取っている状態を示すVoiceFloatのフローティング表示

VoiceFloat — ローカル音声認識と整形で文字を入力するmacOS常駐アプリ

概要

VoiceFloatは、グローバルショートカットで音声入力を始め、認識結果を現在のカーソル位置へ入力するmacOS常駐アプリである。ローカル音声認識、文章整形、貼り付けまでを一つの流れとして扱い、キーボードから手を離したまま短い文章を入力できることを目指した。

背景・目的

AppStoreには精度の高い音声入力ソフトがいくつかリリースされている。しかしそれらは月額利用料がかかり、維持費が高い。私のMacBookは処理能力が高く、ローカルで十分文字起こしすることも可能であるため、似たような音声入力ソフトを制作することにした。

制作で考えたこと

画面上で大きなアプリを開くと、入力したい元の作業を隠してしまう。VoiceFloatでは、録音、文字起こし、整形、完了を小さなフローティング表示で知らせ、結果は前面アプリのカーソル位置へ入れる設計にした。

実装・制作内容

SwiftとAppKitを中心に、AVAudioEngineで録音し、WhisperKitによるローカル音声認識を実装した。必要に応じてOpenAIによる文章整形を組み合わせ、ショートカット起動、Keychainでの設定管理、履歴、クリップボード経由の貼り付けまでをつないでいる。認識モデルの準備状況、聞き取り、文字起こし、整形、完了を状態ごとに表示する。

VoiceFloatが音声を聞き取っている状態を示すフローティング表示
一覧用に整えたサムネイルとは別に、元の状態画面を本文へ掲載する。
VoiceFloatが音声を文字起こししている状態
録音後にローカル音声認識を実行する状態表示。
VoiceFloatが文章を整形している状態
認識結果をそのまま貼り付けず、文章として使える形へ整える処理を示す。

結果・学び

M2 Max・96GBメモリのMacでも、ローカル認識と整形をつなぐと待ち時間が生じ、実用にはチューニングが必要だった。精度とリアルタイム性の両方を高い水準で成立させているChatGPTやPerplexityの音声入力を使うと、プロダクトとしての完成度の高さがよく分かる。音声入力はモデル選択だけでなく、遅延、状態表示、整形品質、貼り付けまでを一体で設計する必要があると学んだ。

About

Yuki Takamukuのアバター

カテゴリー