Python_ブラインドタッチ

ゆうき( @BASEBALLY15 )です^^

パソコンをお持ちの方!
キーボードを見ずに,打つことって結構難しくないですか?

キーボードを見ずに,打ちたいのですが全然できないです・・・

そんな方のために,キーボードを打つと音が出る機能を,Pythonで作ってみました.

キーボードを打つと音が出るって,どういうこと?

このように,メモ帳に文字を書きたいときや,サイトで検索をしたいときに,

キーボードを打つと音が出るような機能を作りました.

この機能を追加することで,

  • ブラインドタッチの練習をしたい方
  • 目が不自由な方

が,キーボードを打つ練習をすることが出来るのではないかと考えています.

どういったツールを使ったの?

他の作業をしながら,音を出す機能を作りたかったので,

Pythonのライブラリである『PyHooked』を使いました.

また,音源は以下のサイトのものを利用させていただきました.

https://www14.big.or.jp/~amiami/happy/voice/yomiage_01.html

それでは,コードを見ていきましょう⤵

キーボードを押すと『音』が出る機能を作ってみた!

ライブラリ

まずは,ライブラリをご紹介します.

#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のパソコンであれば,誰でも使えるので,是非試してみてください^^

それでは・・・

Q &A

参考資料

https://qiita.com/yukiB/items/586b20c58b16b5d3917c

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA