class Voice2Keyboard: def __init__(self): self.hook = Hook() self.hook.handler = self.on_event self.HOTKEY = {'Lwin', 'Z'} self.LANGUAGE = "tr-TR" self.recognizer = speech_recognition.Recognizer() self.lock = False self.list_devices() def list_devices(self): for index, name in enumerate( speech_recognition.Microphone.list_microphone_names()): log.info(f"device_index[{index}]='{name}'") log.info( "if microphone doesn't work, try to set DEVICE_INDEX to one the devices above" ) self.DEVICE_INDEX = None def on_event(self, event): if not isinstance( event, KeyboardEvent) or event.event_type != 'key down' or self.lock: return False if set(event.pressed_key) != self.HOTKEY: # log.info(event.__dict__) return False self.lock = True log.info("listening...") with speech_recognition.Microphone( device_index=self.DEVICE_INDEX) as source: audio = self.recognizer.listen(source) log.info("converting audio to text...") try: text = self.recognizer.recognize_google( audio_data=audio, # This uses Google Speech Engine's public API key. # If you exceed the quota, you need your own API key from https://console.developers.google.com/ key="AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw", language=self.LANGUAGE) log.info(f"typing '{text}'") keyboard.send_keys(text, with_spaces=True) except: log.exception("") finally: keyboard.send_keys("{VK_LWIN up}{Z up}") self.lock = False def listen(self): log.info(f"registering {self.HOTKEY} hotkey") self.hook.hook(keyboard=True, mouse=False) def exit(self): log.info(f"unregistering hotkey") self.hook.unhook_keyboard()