
ゆうき( @BASEBALLY15 )です^^
パソコンをお持ちの方!
キーボードを見ずに,打つことって結構難しくないですか?
キーボードを見ずに,打ちたいのですが全然できないです・・・
そんな方のために,キーボードを打つと音が出る機能を,Pythonで作ってみました.

目次
キーボードを打つと音が出るって,どういうこと?
このように,メモ帳に文字を書きたいときや,サイトで検索をしたいときに,
キーボードを打つと音が出るような機能を作りました.
この機能を追加することで,
- ブラインドタッチの練習をしたい方
- 目が不自由な方
が,キーボードを打つ練習をすることが出来るのではないかと考えています.
どういったツールを使ったの?
他の作業をしながら,音を出す機能を作りたかったので,
Pythonのライブラリである『PyHooked』を使いました.
また,音源は以下のサイトのものを利用させていただきました.
それでは,コードを見ていきましょう⤵
キーボードを押すと『音』が出る機能を作ってみた!
ライブラリ
まずは,ライブラリをご紹介します.
#pyhooked内の機能を使うために用意
from pyhooked import Hook, KeyboardEvent
#wave形式の音声を扱うためのライブラリ
import winsound as ws
#ファイルの処理を行うために用意
import os
今回使う音源が『wave形式』なので,それを使うためのライブラリである『winsound』をインポートします.
コード(全体)
最初に全体のコードを紹介した後に,詳細を説明していきます.
def blind_touch():
#バックグラウンドで押されたキーを取得するための関数
def handle_events(args):
#------------------------------------------------------------------------------------------------------------------
#isinstance(object, class)は、第一引数のオブジェクトが、第二引数の型のインスタンス、またはサブクラスのインスタンスであればTrueを返す関数。
if isinstance(args, KeyboardEvent):
#押されているキー
kb = args.current_key
#キーが押された状態
kb_type = args.event_type
#-------------------------------------------------------
#音を用意(アルファベット)
if kb.isalpha() and kb_type == "key down":
#大文字のアルファベットを小文字に変換
sound_name = f'alphabet01_{kb}_01.wav'
#-------------------------------------------------------
#音を用意(数字)
elif kb.isdigit() and kb_type == "key down":
sound_name = f'num00{kb}_01.wav'
#-------------------------------------------------------
#音を用意(エンターキー)
if kb == "Return" and kb_type == "key down":
sound_name = "ok_01.wav"
#音を用意(バックスペースキー)
if kb == "Back" and kb_type == "key down":
sound_name = "clear_01.wav"
#-------------------------------------------------------
#音を出す
if os.path.exists(sound_name):
ws.PlaySound(sound_name,ws.SND_FILENAME)
#何のキーが押されたかを表示
print(args.key_code, args.current_key, args.event_type)
#------------------------------------------------------------------------------------------------------------------
#PyHookedの新しいインスタンスを作成する
hk = Hook()
#handle_events関数を呼び出す
hk.handler = handle_events
#イベントにフックし、プレスを聞く
hk.hook()
#コマンドプロンプト上で実行
if __name__ == "__main__":
blind_touch()
コード(詳細)
def handle_events(args)内のコードについてご説明します.
押されたキーを読み取ろう!
まずは,以下のコードで,押されているキーを読み取ります.
#isinstance(object, class)は、第一引数のオブジェクトが、第二引数の型のインスタンス、またはサブクラスのインスタンスであればTrueを返す関数。
if isinstance(args, KeyboardEvent):
#押されているキー
kb = args.current_key
#キーが押された状態
kb_type = args.event_type
音源によって,処理を分けよう!
次に,押されたキーによって,音源を変えたいので,以下のコードを記述します.
#-------------------------------------------------------
#音を用意(アルファベット)
if kb.isalpha() and kb_type == "key down":
#音源のファイル名
sound_name = f'alphabet01_{kb}_01.wav'
#-------------------------------------------------------
#音を用意(数字)
elif kb.isdigit() and kb_type == "key down":
#音源のファイル名
sound_name = f'num00{kb}_01.wav'
#-------------------------------------------------------
#音を用意(エンターキー)
if kb == "Return" and kb_type == "key down":
#音源のファイル名
sound_name = "ok_01.wav"
#音を用意(バックスペースキー)
if kb == "Back" and kb_type == "key down":
#音源のファイル名
sound_name = "clear_01.wav"
#-------------------------------------------------------
ちなみに,
- アルファベットの音源→alphabet01_{アルファベット}_01.wav
- 数字の音源→num00{数字}_01.wav
- エンターキーの音源→ok_01.wav
- バックスペースキーの音源→clear_01.wav
となっています.
音を出すコードを書こう!
次に,押されたキーによって,それぞれの音を出すための処理を行います.
また,何のキーが押されたのかをprintで表示させます.
#もし,sound_nameが存在するなら,
if os.path.exists(sound_name):
#音を出す
ws.PlaySound(sound_name,ws.SND_FILENAME)
#何のキーが押されたかを表示
print(args.key_code, args.current_key, args.event_type)
終わりに
今回は,Pythonを使って,キーボードを押すと音が出る機能を作りました.
このコードをexe化すると,Windowsのパソコンであれば,誰でも使えるので,是非試してみてください^^
それでは・・・