Windows11、ローカル音声入力Whisper 7秒間 音声変換プログラム
題目の理由
キーボード入力で文字を打ちむのがつかれてしまったは私は、音声入力で楽をしようとったのですが、windows11のローカル環境では音声入力ができませんでした。
そこで、M4 mac book と同じ動作環境を手に入れたいと考え、ためしに、7秒間だけ音声変換するプログラムを作成しました。
今回プログラムの作成に協力していただいたLLMは、Deepseek と ChatGPT 君で、作製期間は約3日を要しました(環境構築初回の為、pythonのライブラリ及び、Whisper本体モデルデータのダウンロード、python仮想環境構築等に手間がかかった)
注意事項及び連絡事項
本記事は、60代男性、MS-DOS、BASICプログラム経験多少有の人物が書いた記事で有り、プロが書いた記事では有りません。
私の記憶違いや勘違い、記憶のボケ、スペルのタイプミス、作成したプログラムの動作等により、パソコン等が、動作不能または、不具合が発生した状態になったとしても私はその責任を取る事が出来ない事をご理解、ご承諾のうえお読みください。
また、記載した記事には、記憶の抜けや記載しきれない為に抜けている作業部分が 存在します事をご了承ください。
更に、エラーが 発生した場合は、 無料で使用できるスマホアプリやPCのgemini・deepseek・ChatGPT等に画像を添付して、 この画面の内容を教えて と質問して、 その回答に合わせて内容を 確認し、 対応の仕方を質問して対処しております。
この為、必要に応じ実施してはいけない作業等も実施している場合も存在します。
本記事はあくまでも、素人の私がLLM(gemini・deepseek・ChatGPT等)を使用して作業した内容の状況を記載しているものであり、この作業の通り実施すれば必ずしもうまく動作するというものではありませんので あらかじめご了承ください。
LLMは、同じ質問をしても同じ回答が帰ってこない場合もあり得ます。また、間違った回答をする場合もあり得ます事も合わせてご確認、ご承諾の上お読みいただく様にお願いいたします。
動作確認環境
使用しているOS等 : Windows11
python 3.11.9 (仮想環境内で実行)
python用ライブラリ(記事の内容で確認をお願いします)
音声認識用AI : OpenAI社開発 Whisper (MITライセンス)
Model small int8
使用しているノートパソコン : DELL 16Plus DB16250
CPU intel core ultra7 258v
内臓GPU intel ARC
メインメモリ 32GB
windows11のマイク入力設定値 : 38(25から60ならある程度正常動作確認済)
他のPCで、動作確認する場合は、まず初めに windows11のマイク入力設定値 : 38 を上下に調整して確認してみてください。
プログラム起動前の確認
Windows11の設定にて、マイク(入力)のボリュームを38にする。
こちらを38に設定した理由は、オンライン時の音声入力で確認して問題ないボリュームの設定値が38で有ったためです。
動作仕様及び説明(voice.py)
*1 本文書の1部分は、完成したプログラムの内容をLLMに伝えて作成している部分が存在します。文章の解釈についての確認は全てにおいて、完了していないので、部分的な誤りがあるかもしれません。
この事を事前にご了承の上お読みください。
*2 今回作成したpythonのプログラム名は、voice.pyになります。
プログラムの起動(voice.py)
ターミナルから仮想環境に入り、プログラムを起動するとターミナルの画面に voice.py 7秒 WhisperModel small cpu int8 モデル読み込み中... と表示され、モデルのダウンロードが開始されます。
*3初回のみWhisperのモデルを内部記憶装置(SSD等)に外部からダウンロード(たしか、勝手にCドライブ内の所定のフォルダーにダウンロードされたと思いますが、こちらは忘れてしまい定かでありませんので、各自で確認をお願いします)するので、数分~数十分の時間がかかります。
2回目以降は、約2.5秒で完了します。
完了すると、 Enter押すと録音開始| と表示が出て | が点滅して音声入力待ちとなり、PC画面の右下にも、マイクののアイコンが表示されます。
この時、メモ帳を開いてカーソルが点滅している状態にすれば、こちらにも表示が出ます(エクセルでも同様に操作可能です)
Enterを押してから、無音時間も含めて7秒間の発音した言葉を文章に変換します。
Deepseek による、プログラムの解説
全体的な動作の流れ
ユーザーが Enterキー を押す。
sounddevice で 7秒間録音
faster-whisper で 日本語の音声認識(CPU, smallモデル)
認識されたテキストを pynput で キーボード入力
次の入力を待つループ(無限)
使用している主なライブラリと役割

モデルの設定
model = WhisperModel("small", device="cpu", compute_type="int8")"small" : Whisperのモデルサイズ(精度と速度のバランスが良い)device="cpu" : CPUで動作させる(GPU非対応環境用)
compute_type="int8" : 整数8ビット量子化 → メモリ削減&高速化(精度は少し低下)
録音設定
samplerate = 16000 # サンプリングレート 16kHz(Whisper標準に近い)
duration = 7 # 録音時間 7秒モノラル(channels=1)で録音
sd.rec() + sd.wait() で同期的に録音
認識処理のポイント
segments, info = model.transcribe(audio, language="ja")language="ja" で 日本語固定(言語自動検出なし)
segments : 認識結果のセグメント(文区切りごと)
現在のコードでは info は使われていません(言語確率などが入る)
連続動作の仕組み
while True:
input("Enter押すと録音開始")
...
keyboard.type(text)input() で Enter待ち になる
録音&認識中はブロッキングされる。
終わるとすぐ次の入力待ちループへ
強制終了は Ctrl+C などで止める必要あり
while True:
input("Enter押すと録音開始")
...
keyboard.type(text)想定されるユースケース
ボイス入力装置として(発話 → 自動テキスト挿入)
ディクテーション代わり
アプリやエディタへの音声入力マクロ
現在のコードの制限・問題点

プログラム本体の内容(voice.py)
import sounddevice as sd
import numpy as np
from faster_whisper import WhisperModel
from pynput.keyboard import Controller
import sys
print("voice.py 7秒 WhisperModel small cpu int8 モデル読み込み中...")
model = WhisperModel("small", device="cpu", compute_type="int8")
keyboard = Controller()
samplerate = 16000
duration = 7
def record():
print("録音中...")
audio = sd.rec(int(duration * samplerate), samplerate=samplerate, channels=1)
sd.wait()
return audio.flatten()
while True:
input("Enter押すと録音開始")
audio = record()
segments, info = model.transcribe(audio, language="ja")
text = ""
for seg in segments:
text += seg.text
print("認識:", text)
keyboard.type(text)実行画面例1(メモ帳起動が無い状態)
機動直後にモデルデータを読み込み完了したところ

その後、こんにちはと発音し、約7秒後に変換が完了したところ(テキストファイルを開いていない場合)

実行画面例2(メモ帳を起動して、カーソルがそこに有る状態時)
起動後、こんにちはと発音し、約7秒後に変換が完了したところ


音声入力待ち時の画面、右下の表示(マイクのアイコン表示有り状態)

画面を拡大表示したところ

