From d62ba8306fbe1cbb6e515fd81f1e8f7214379b8f Mon Sep 17 00:00:00 2001 From: 0Xiaohei0 <15852786007ysc@gmail.com> Date: Sun, 26 Mar 2023 17:01:21 -0400 Subject: [PATCH] toggle subtitler overlay border --- STTS.py | 417 ---------------------------------------------- STTSLocal.py | 13 +- UI.py | 51 ++++-- audioResponse.wav | Bin 111148 -> 111148 bytes 4 files changed, 44 insertions(+), 437 deletions(-) delete mode 100644 STTS.py diff --git a/STTS.py b/STTS.py deleted file mode 100644 index 7a70606..0000000 --- a/STTS.py +++ /dev/null @@ -1,417 +0,0 @@ -import os -import pyaudio -from pydub import AudioSegment -from pydub.playback import play -import requests -import json -import azure.cognitiveservices.speech as speechsdk -from enum import Enum -import romajitable -import dict - -SPEECH_KEY = os.environ.get('SPEECH_KEY_P') -SPEECH_REGION = os.environ.get('SPEECH_REGION') -DEEPL_TOKEN = os.environ.get("translation-service-api-token") -VOICE_VOX_URL = "20.85.153.114" -VOICE_VOX_URL_LOCAL = "127.0.0.1" -use_local_voice_vox = False - -MIC_OUTPUT_FILENAME = "Output/output.mp3" -audio = pyaudio.PyAudio() - - -recording = False -auto_recording = False -logging_eventhandlers = [] - -voice_name = '四国めたん' -input_language_name = 'English' - -# Stores variable for play original function -last_input_text = '' -last_voice_param = None -last_input_language = '' - -speech_recognizer = None - - -class VoiceVoxSpeaker(Enum): - 四国めたん_1 = 2 - 四国めたん_2 = 0 - 四国めたん_3 = 6 - 四国めたん_4 = 4 - 四国めたん_5 = 36 - 四国めたん_6 = 37 - - 春日部つむぎ = 8 - 雨晴はう = 10 - 冥鳴ひまり = 14 - - 九州そら_1 = 16 - 九州そら_2 = 15 - 九州そら_3 = 17 - 九州そら_4 = 19 - - もち子さん = 20 - 剣崎雌雄 = 21 # male - - ナースロボタイプ_1 = 47 - ナースロボタイプ_2 = 48 - ナースロボタイプ_3 = 49 - ナースロボタイプ_4 = 50 - - 小夜SAYO = 46 - 櫻歌ミコ_1 = 43 - 櫻歌ミコ_2 = 44 - 櫻歌ミコ_3 = 45 - - No7_1 = 29 - No7_2 = 30 - No7_3 = 31 - - -class VoiceType(Enum): - MICROSOFT_AZURE = 0 - VOICE_VOX = 1 - - -class Voice(): - def __init__(self, voice_type, voice_id, voice_language): - self.voice_type = voice_type - self.voice_id = voice_id - self.voice_language = voice_language - - -voicename_to_callparam_dict = { - "四国めたん": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.四国めたん_1.value, "Japanese"), - "四国めたん_2": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.四国めたん_2.value, "Japanese"), - "四国めたん_3": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.四国めたん_3.value, "Japanese"), - "四国めたん_4": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.四国めたん_4.value, "Japanese"), - "四国めたん_5": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.四国めたん_5.value, "Japanese"), - "四国めたん_6": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.四国めたん_6.value, "Japanese"), - "春日部つむぎ": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.春日部つむぎ.value, "Japanese"), - "雨晴はう": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.雨晴はう.value, "Japanese"), - "冥鳴ひまり": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.冥鳴ひまり.value, "Japanese"), - "九州そら_1": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.九州そら_1.value, "Japanese"), - "九州そら_2": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.九州そら_2.value, "Japanese"), - "九州そら_3": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.九州そら_3.value, "Japanese"), - "九州そら_4": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.九州そら_4.value, "Japanese"), - "もち子さん": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.もち子さん.value, "Japanese"), - "ナースロボタイプ_1": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.ナースロボタイプ_1.value, "Japanese"), - "ナースロボタイプ_2": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.ナースロボタイプ_2.value, "Japanese"), - "ナースロボタイプ_3": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.ナースロボタイプ_3.value, "Japanese"), - "ナースロボタイプ_4": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.ナースロボタイプ_4.value, "Japanese"), - "小夜SAYO": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.小夜SAYO.value, "Japanese"), - "櫻歌ミコ_1": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.櫻歌ミコ_1.value, "Japanese"), - "櫻歌ミコ_2": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.櫻歌ミコ_2.value, "Japanese"), - "櫻歌ミコ_3": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.櫻歌ミコ_3.value, "Japanese"), - "No7_1": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.No7_1.value, "Japanese"), - "No7_2": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.No7_2.value, "Japanese"), - "No7_3": Voice(VoiceType.VOICE_VOX.value, VoiceVoxSpeaker.No7_3.value, "Japanese"), - "JP-Aoi": Voice(VoiceType.MICROSOFT_AZURE.value, "ja-JP-AoiNeural", "Japanese"), - "CN-Xiaoyi": Voice(VoiceType.MICROSOFT_AZURE.value, "zh-CN-XiaoyiNeural", "Chinese"), -} - -language_dict = dict.language_dict - - -def initialize_speech_recognizer(): - global speech_recognizer - speech_config = speechsdk.SpeechConfig( - subscription=SPEECH_KEY, region=SPEECH_REGION) - speech_config.speech_recognition_language = language_dict[input_language_name] - audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True) - speech_recognizer = speechsdk.SpeechRecognizer( - speech_config=speech_config, audio_config=audio_config) - # speech_recognizer.recognizing.connect( - # lambda evt: print(f'RECOGNIZING: {evt.result.text}')) - speech_recognizer.recognized.connect( - lambda evt: start_TTS_pipeline(evt.result.text)) - speech_recognizer.canceled.connect(showReconitionErrors) - - speech_recognizer.session_stopped.connect(stop_record_auto) - speech_recognizer.canceled.connect(stop_record_auto) - - -def showReconitionErrors(speech_recognition_result): - print(speech_recognition_result) - speech_recognition_result = speech_recognition_result.result - if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech: - log_message("Recognized: {}".format(speech_recognition_result.text)) - elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch: - log_message("No speech could be recognized: {}".format( - speech_recognition_result.no_match_details)) - elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled: - cancellation_details = speech_recognition_result.cancellation_details - log_message("Speech Recognition canceled: {}".format( - cancellation_details.reason)) - if cancellation_details.reason == speechsdk.CancellationReason.Error: - log_message("Error details: {}".format( - cancellation_details.error_details)) - - -def start_record(): - log_message("Recording...") - - CHUNK = 1024 - FORMAT = pyaudio.paInt16 - CHANNELS = 1 - RATE = 44100 - - stream = audio.open(format=FORMAT, channels=CHANNELS, - rate=RATE, input=True, - frames_per_buffer=CHUNK) - # Initialize frames array to store audio data - frames = [] - - # Record audio data - global recording - recording = True - while True: - data = stream.read(CHUNK) - frames.append(data) - if not recording: - break - - # Stop recording and close audio stream - log_message("Recording stopped.") - stream.stop_stream() - stream.close() - - # Save recorded audio data to file - audio_segment = AudioSegment( - data=b''.join(frames), - sample_width=audio.get_sample_size(FORMAT), - frame_rate=RATE, - channels=CHANNELS - ) - - audio_segment.export(MIC_OUTPUT_FILENAME, format="mp3") - - -def stop_record(): - global recording - recording = False - log_message("Recording Stopped") - start_STTS_pipeline( - azure_tts_voice_name='ja-JP-AoiNeural', SPEAKER_ID=VoiceVoxSpeaker.九州そら_1.value, inputLanguage='zh', outputLanguage='ja' - ) - - -def start_record_auto(): - log_message("Recording...") - global auto_recording - global speech_recognizer - auto_recording = True - speech_recognizer.start_continuous_recognition() - - -def stop_record_auto(): - global auto_recording - global speech_recognizer - auto_recording = False - speech_recognizer.stop_continuous_recognition() - log_message("Recording Stopped") - - -def sendAudioToWhisper(file_name, input_language): - with open(file_name, "rb") as file: - url = "http://localhost:9000/asr" - - params = { - 'task': 'transcribe', - 'language': input_language, - 'output': 'txt' - } - files = [ - ('audio_file', (MIC_OUTPUT_FILENAME, file, 'audio/mpeg')) - ] - SpeechToTextResponse = requests.request( - "POST", url, params=params, files=files) - output = SpeechToTextResponse.text.rstrip('\n') - log_message(f'Input: {output}') - return output - - -def sendTextToTranslationService(text, outputLanguage): - - # Send text to translation service - headers = { - 'Authorization': f'DeepL-Auth-Key {DEEPL_TOKEN}', - 'Content-Type': 'application/x-www-form-urlencoded', - } - data = f'text={text}&target_lang={outputLanguage.upper()}' - translationResponse = requests.post( - 'https://api-free.deepl.com/v2/translate', headers=headers, data=data.encode('utf-8')) - responseJSON = json.loads( - translationResponse.content.decode('utf-8')) - if "translations" in responseJSON: - text_output = responseJSON['translations'][0]['text'] - log_message(f'Translation: {text_output}') - return text_output - else: - log_message("Error retrieving translation:") - log_message(responseJSON) - return "" - - -def sendTextToSyntheizer(text, speaker_id): - current_voicevox_url = VOICE_VOX_URL - if (use_local_voice_vox): - current_voicevox_url = VOICE_VOX_URL_LOCAL - url = f"http://{current_voicevox_url}:50021/audio_query?text={text}&speaker={speaker_id}" - - VoiceTextResponse = requests.request("POST", url) - - url = f"http://{current_voicevox_url}:50021/synthesis?speaker={speaker_id}" - headers = { - 'Content-Type': 'application/json' - } - payload = VoiceTextResponse - AudioResponse = requests.request( - "POST", url, data=payload) - log_message("Speech synthesized for text [{}]".format(text)) - return AudioResponse - - -def CallAzureTTS(text, azure_tts_voice_name): - # This example requires environment variables named "SPEECH_KEY" and "SPEECH_REGION" - speech_config = speechsdk.SpeechConfig(SPEECH_KEY, SPEECH_REGION) - audio_config = speechsdk.audio.AudioOutputConfig( - use_default_speaker=True) - - # The language of the voice that speaks. - speech_config.speech_synthesis_voice_name = azure_tts_voice_name - - speech_synthesizer = speechsdk.SpeechSynthesizer( - speech_config=speech_config, audio_config=audio_config) - speech_synthesis_result = speech_synthesizer.speak_text_async(text).get() - - if speech_synthesis_result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted: - log_message("Speech synthesized for text [{}]".format(text)) - elif speech_synthesis_result.reason == speechsdk.ResultReason.Canceled: - cancellation_details = speech_synthesis_result.cancellation_details - log_message("Speech synthesis canceled: {}".format( - cancellation_details.reason)) - if cancellation_details.reason == speechsdk.CancellationReason.Error: - if cancellation_details.error_details: - log_message("Error details: {}".format( - cancellation_details.error_details)) - log_message( - "Did you set the speech resource key and region values?") - - -def PlayAudio(audioBytes): - with open("audioResponse.wav", "wb") as file: - file.write(audioBytes) - voiceLine = AudioSegment.from_wav("audioResponse.wav") - play(voiceLine) - - # Examples of azure_tts_voice_name: - # Female - # ja-JP-AoiNeural ja-JP-NanamiNeural ja-JP-MayuNeural ja-JP-ShioriNeural - # zh-CN-XiaoyiNeural zh-CN-XiaoshuangNeural - # India en-IN-NeerjaNeural - # Child en-GB-MaisieNeural - # US en-US-AmberNeural - # - # Male - # ja-JP-KeitaNeural - - # example of language codes - # "zh": "chinese", "ja": "japanese", "en": "english", "ko": "korean" - - -def start_STTS_pipeline( - azure_tts_voice_name='ja-JP-AoiNeural', SPEAKER_ID=VoiceVoxSpeaker.九州そら_1.value, inputLanguage='zh', outputLanguage='ja' -): - use_microsoft_azure_tts = False - - input_text = sendAudioToWhisper(MIC_OUTPUT_FILENAME, inputLanguage) - translate = inputLanguage != outputLanguage - - if (translate): - input_processed_text = sendTextToTranslationService( - input_text, outputLanguage) - else: - input_processed_text = input_text - - if (use_microsoft_azure_tts): - CallAzureTTS(input_processed_text, azure_tts_voice_name) - else: - AudioResponse = sendTextToSyntheizer(input_processed_text, SPEAKER_ID) - PlayAudio(AudioResponse.content) - log_message('') - - -def start_TTS_pipeline(input_text): - if (input_text == ''): - return - log_message(f'Input: {input_text}') - global voice_name - inputLanguage = language_dict[input_language_name][:2] - voiceparam = voicename_to_callparam_dict[voice_name] - outputLanguage = language_dict[voiceparam.voice_language][:2] - # print(f"inputLanguage: {inputLanguage}, outputLanguage: {outputLanguage}") - use_microsoft_azure_tts = voiceparam.voice_type == VoiceType.MICROSOFT_AZURE.value - translate = inputLanguage != outputLanguage - if (translate): - input_processed_text = sendTextToTranslationService( - input_text, outputLanguage) - else: - input_processed_text = input_text - if (use_microsoft_azure_tts): - CallAzureTTS(input_processed_text, voiceparam.voice_id) - else: - AudioResponse = sendTextToSyntheizer( - input_processed_text, voiceparam.voice_id) - PlayAudio(AudioResponse.content) - - global last_input_text - last_input_text = input_text - global last_input_language - last_input_language = inputLanguage - global last_voice_param - last_voice_param = voiceparam - - -def playOriginal(): - global last_input_text - global last_voice_param - global last_input_language - last_input_text_processed = '' - if (last_input_language != 'en'): - last_input_text_processed = sendTextToTranslationService( - last_input_text, 'en') - else: - last_input_text_processed = last_input_text - text_ja = romajitable.to_kana(last_input_text_processed).katakana - text_ja = text_ja.replace('・', '') - if (last_voice_param.voice_type == VoiceType.MICROSOFT_AZURE.value): - CallAzureTTS(text_ja, last_voice_param.voice_id) - else: - PlayAudio(sendTextToSyntheizer( - text_ja, last_voice_param.voice_id).content) - log_message(f'playing input: {text_ja}') - - -def log_message(message_text): - print(message_text) - global logging_eventhandlers - for eventhandler in logging_eventhandlers: - eventhandler(message_text) - - -def change_input_language(input_lang_name): - global input_language_name - global auto_recording - input_language_name = input_lang_name - if (auto_recording): - stop_record_auto() - initialize_speech_recognizer() - start_record_auto() - else: - initialize_speech_recognizer() - - -initialize_speech_recognizer() diff --git a/STTSLocal.py b/STTSLocal.py index 4af637c..c09b364 100644 --- a/STTSLocal.py +++ b/STTSLocal.py @@ -126,12 +126,17 @@ def sendTextToSyntheizer(text, speaker_id, api_key=''): try: # download wav file from response wav_url = response_json['wavDownloadUrl'] - print(f"Downloading wav response from {wav_url}") - wav_bytes = requests.get(wav_url).content - PlayAudio(wav_bytes) except: - print("Failed to download wav.") + print("Failed to get wav download link.") print(response_json) + return + print(f"Downloading wav response from {wav_url}") + wav_bytes = requests.get(wav_url).content + try: + PlayAudio(wav_bytes) + except: + print("Failed to play wav.") + print(wav_bytes) else: PlayAudio(response.content) diff --git a/UI.py b/UI.py index dba0ff1..3b1f2c6 100644 --- a/UI.py +++ b/UI.py @@ -193,23 +193,23 @@ def __init__(self, master, **kwargs): self.subtitle_overlay = None self.label = customtkinter.CTkLabel( master=self, text='Subtitle position') - self.label.pack(padx=10, pady=10) + self.label.grid(row=0, column=0, padx=10, pady=10, sticky='W') self.sub_pos_x = 0.2 self.sub_pos_y = 0.8 self.audio_level = 0.3 xslider = customtkinter.CTkSlider( master=self, from_=0, to=100, command=self.slider_event_x) - xslider.pack(padx=10, pady=10) + xslider.grid(row=0, column=1, padx=10, pady=10, sticky='W') yslider = customtkinter.CTkSlider( master=self, from_=0, to=100, command=self.slider_event_y) - yslider.pack(padx=10, pady=10) + yslider.grid(row=0, column=2, padx=10, pady=10, sticky='W') label_mic = customtkinter.CTkLabel( master=self, text='Mic activity: ') - label_mic.pack(padx=20, pady=10) + label_mic.grid(row=1, column=0, padx=10, pady=10, sticky='W') self.progressbar = customtkinter.CTkProgressBar(master=self, width=100) - self.progressbar.pack(padx=20, pady=0) + self.progressbar.grid(row=2, column=0, padx=10, pady=10, sticky='W') thread = Thread(target=self.update_mic_meter_loop) thread.start() self.listen_to_mic_thread = Thread(target=self.subtitle_listen_to_mic) @@ -219,14 +219,16 @@ def __init__(self, master, **kwargs): value=5) self.phrase_max_length_label = customtkinter.CTkLabel( master=self, text=f'Phrase max length: {self.phrase_max_length_var.get()}') - self.phrase_max_length_label.pack(padx=10, pady=10) + self.phrase_max_length_label.grid( + row=3, column=0, padx=10, pady=10, sticky='W') self.phrase_max_length_slider = customtkinter.CTkSlider( master=self, from_=3, to=30, command=self.update_phrase_max_length, variable=self.phrase_max_length_var) - self.phrase_max_length_slider.pack(padx=10, pady=10) + self.phrase_max_length_slider.grid( + row=3, column=1, padx=10, pady=10, sticky='W') audio_driver_label = customtkinter.CTkLabel( master=self, text='Audio driver: ') - audio_driver_label.pack(padx=20, pady=10) + audio_driver_label.grid(row=4, column=0, padx=10, pady=10, sticky='W') self.audio_drivers = self.get_audio_drivers() self.audio_driver_names = list( map(lambda driver: driver['name'], self.audio_drivers)) @@ -236,11 +238,12 @@ def __init__(self, master, **kwargs): values=self.audio_driver_names, command=self.audio_driver_dropdown_callback, variable=self.audio_input_combobox_var) - self.audio_input_combobox.pack(padx=20, pady=0) + self.audio_input_combobox.grid( + row=4, column=1, padx=10, pady=10, sticky='W') audio_input_label = customtkinter.CTkLabel( master=self, text='Input device: ') - audio_input_label.pack(padx=20, pady=10) + audio_input_label.grid(row=5, column=0, padx=10, pady=10, sticky='W') self.audio_devices = self.get_audio_devices() self.input_audio_devices = list(filter( lambda device: device['max_input_channels'] > 0, self.audio_devices)) @@ -253,11 +256,21 @@ def __init__(self, master, **kwargs): values=self.input_audio_device_names, command=self.audio_input_dropdown_callbakck, variable=self.audio_input_combobox_var) - self.audio_input_combobox.pack(padx=20, pady=0) + self.audio_input_combobox.grid( + row=5, column=1, padx=10, pady=10, sticky='W') self.toggle_overlay_button = customtkinter.CTkButton( self, text="start overlay", command=self.toggle_subtitle_button_callback) - self.toggle_overlay_button.pack(padx=20, pady=20) + self.toggle_overlay_button.grid( + row=6, column=0, padx=10, pady=10, sticky='W') + + self.hide_border_var = customtkinter.BooleanVar(self, True) + show_border_checkbox = customtkinter.CTkCheckBox(master=self, text="Hide border on overlay", command=self.set_show_border, + variable=self.hide_border_var, onvalue=True, offvalue=False) + # show_border_checkbox.grid( + # row=4, column=0, padx=10, pady=10, sticky='W') + show_border_checkbox.grid( + row=6, column=1, padx=10, pady=10, sticky='W') def slider_event_x(self, value): self.sub_pos_x = value/100 @@ -280,11 +293,11 @@ def toggle_subtitle_button_callback(self): # create window if its None or destroyed self.open_subtitle_overlay() self.toggle_overlay_button.configure( - text="Stop Recording", fg_color='#fc7b5b') + text="close overlay", fg_color='#fc7b5b') else: self.stop_subtitle_overlay() self.toggle_overlay_button.configure( - text="Start Recording", fg_color='grey') + text="start overlay", fg_color='grey') def open_subtitle_overlay(self): if self.subtitle_overlay is None or not self.subtitle_overlay.winfo_exists(): @@ -292,6 +305,7 @@ def open_subtitle_overlay(self): self.subtitle_overlay = SubtitleOverlay() SUB.start() SUB.text_change_eventhandlers.append(self.update_text) + self.subtitle_overlay.overrideredirect(self.hide_border_var.get()) else: self.subtitle_overlay.focus() # if window exists focus it @@ -373,14 +387,19 @@ def subtitle_listen_to_mic(self): with self._subtitle_mic_stream: sd.sleep(10000000) + def set_show_border(self): + if not (self.subtitle_overlay is None or not self.subtitle_overlay.winfo_exists()): + # if subtitle_overlay exists + self.subtitle_overlay.overrideredirect(self.hide_border_var.get()) + class SubtitleOverlay(customtkinter.CTkToplevel): def __init__(self): super().__init__() self.geometry("1920x1080+0+0") self.title("app") - self.resizable(False, False) - self.overrideredirect(1) + self.resizable(True, True) + # self.overrideredirect(1) self.attributes("-topmost", True) self.wm_attributes('-transparentcolor', 'black') self.configure(fg_color='black') diff --git a/audioResponse.wav b/audioResponse.wav index aa7a6bac57680d73c7877c1496c930c84fddc512..0f19c4cc5157f4ca2a838fada09be93cb1818d0c 100644 GIT binary patch delta 24581 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 delta 24581 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