Merge branch 'for_v1.3' into develop

This commit is contained in:
misygauziya
2023-07-21 05:42:43 +09:00
5 changed files with 144 additions and 83 deletions

View File

@@ -50,7 +50,7 @@ ptyhon VRCT.py
(任意) (任意)
1. DeepLのAPIを使用するためにアカウント登録し、認証キーを取得する 1. DeepLのAPIを使用するためにアカウント登録し、認証キーを取得する
2. ギアアイコンのボタンでconfigウィンドウを開く 2. ギアアイコンのボタンでconfigウィンドウを開く
3. ParameterタブのDeepL Auth Keyに認証キーを記載し、フロッピーアイコンのボタンを押す 3. ParameterタブのDeepL Auth Keyに認証キーを記載
4. configウィンドウを閉じる 4. configウィンドウを閉じる
### Normal use ### Normal use
@@ -75,22 +75,29 @@ ptyhon VRCT.py
- Appearance Theme: ウィンドウテーマを選択 - Appearance Theme: ウィンドウテーマを選択
- UI Scaling: UIサイズを調整 - UI Scaling: UIサイズを調整
- Font Family: 表示フォントを選択 - Font Family: 表示フォントを選択
- **(New!) UI Language: UIの表示言語を選択**
- Translation tab - Translation tab
- Select Translator: 翻訳エンジンの変更 - Select Translator: 翻訳エンジンの変更
- Send Language: 送信するメッセージに対して翻訳する言語[source, target]を選択 - Send Language: 送信するメッセージに対して翻訳する言語[source, target]を選択
- Receive Language: 受信したメッセージに対して翻訳する言語[source, target]を選択 - Receive Language: 受信したメッセージに対して翻訳する言語[source, target]を選択
- Transcription tab - Transcription tab
- **(New!) Input Mic Host: マイクのホストAPIを選択**
- Input Mic Device: マイクを選択 - Input Mic Device: マイクを選択
- Input Mic Voice Language: 入力する音声の言語 - Input Mic Voice Language: 入力する音声の言語
- Input Mic Energy Threshold: 音声取得のしきい値 - Input Mic Energy Threshold: 音声取得のしきい値
- **(New!) Check threshold point: Input Mic Energy Thresholdのしきい値を視覚化**
- Input Mic Dynamic Energy Threshold: 音声取得のしきい値の自動調整 - Input Mic Dynamic Energy Threshold: 音声取得のしきい値の自動調整
- Input Mic Phase Timeout: 文字起こしする音声時間の上限
- Input Mic Record Timeout: 音声の区切りの無音時間 - Input Mic Record Timeout: 音声の区切りの無音時間
- Input Mic Max Phrases: 保留する単語の上限 - Input Mic Max Phrases: 保留する単語の上限
- **(New!) Input Mic Word Filter: MICの文字起こし時にWord Filterで設定した文字が入っていた場合にChatboxに表示しない (ex AAA,BBB,CCC)**
- Input Speaker Device: スピーカーを選択 - Input Speaker Device: スピーカーを選択
- Input Speaker Voice Language: 受信する音声の言語 - Input Speaker Voice Language: 受信する音声の言語
- Input Speaker Energy Threshold: 音声取得のしきい値 - Input Speaker Energy Threshold: 音声取得のしきい値
- **(New!) Check threshold point: (New!)Input Speaker Energy Thresholdのしきい値を視覚化**
- Input Speaker Dynamic Energy Threshold: 音声取得のしきい値の自動調整 - Input Speaker Dynamic Energy Threshold: 音声取得のしきい値の自動調整
- Input Speaker Record Timeout: 音声の区切りの無音時間 - Input Speaker Record Timeout: 音声の区切りの無音時間
- Input Speaker Phase Timeout: 文字起こしする音声時間の上限
- Input Speaker Max Phrases: 保留する単語の上限 - Input Speaker Max Phrases: 保留する単語の上限
- Parameter tab - Parameter tab
- OSC IP address: 変更不要 - OSC IP address: 変更不要
@@ -101,9 +108,11 @@ ptyhon VRCT.py
- [translation]が翻訳されたメッセージに置換される - [translation]が翻訳されたメッセージに置換される
- 初期フォーマット:`[message]([translation])` - 初期フォーマット:`[message]([translation])`
- Others tab - Others tab
- Auto clear chat box: チャット送信時にチャットボックスを空にする - **(New!) Auto clear chat box: メッセージ送信後に書き込んだメッセージを空にする**
## Author ## Author
みしゃ(misyaguzi) みしゃ(misyaguzi)
twitter: https://twitter.com/misya_ai twitter: https://twitter.com/misya_ai
booth: https://misyaguziya.booth.pm/items/4814313 booth: https://misyaguziya.booth.pm/items/4814313
Shiina_12siy

View File

@@ -1,79 +1,90 @@
ご購入ありがとうございます。 ご購入ありがとうございます。
フィードバックお待ちしております。 フィードバックお待ちしております。
概要 # 概要
VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツールになります。 VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツールになります。
翻訳エンジンを使用してメッセージとその翻訳部分を同時に送信することができます。 翻訳エンジンを使用してメッセージとその翻訳部分を同時に送信することができます。
(翻訳エンジンはDeepL,Google,Bingに対応) (翻訳エンジンはDeepL,Google,Bingに対応)
使用方法 # 使用方法
 初期設定時 初期設定時
  0. VRChatのOSCを有効にする重要 0. VRChatのOSCを有効にする重要
  (任意) (任意)
  1. DeepLのAPIを使用するためにアカウント登録し、認証キーを取得する 1. DeepLのAPIを使用するためにアカウント登録し、認証キーを取得する
  2. ギアアイコンのボタンでconfigウィンドウを開く 2. ギアアイコンのボタンでconfigウィンドウを開く
  3. ParameterタブのDeepL Auth Keyに認証キーを記載し、フロッピーアイコンのボタンを押す 3. ParameterタブのDeepL Auth Keyに認証キーを記載
  4. configウィンドウを閉じる 4. configウィンドウを閉じる
 通常使用時 通常使用時
  1. メッセージボックスにメッセージを記入 1. メッセージボックスにメッセージを記入
  2. Enterキーを押し、メッセージを送信する 2. Enterキーを押し、メッセージを送信する
 その他の設定 # その他の設定
  - translation チェックボックス: 翻訳の有効無効 translation チェックボックス: 翻訳の有効無効
  - voice2chatbox チェックボックス : マイクの音声を文字起こししてチャットボックスに送信する voice2chatbox チェックボックス : マイクの音声を文字起こししてチャットボックスに送信する
  - speaker2log チェックボックス : スピーカーの音声から文字起こししてログに表示する speaker2log チェックボックス : スピーカーの音声から文字起こししてログに表示する
  - foreground チェックボックス: 最前面表示の有効無効 foreground チェックボックス: 最前面表示の有効無効
   - テキストボックス テキストボックス
    - logタブ: すべてのログを表示 logタブ
    - sendタブ: 送信したメッセージを表示 すべてのログを表示
    - receiveタブ: 受信したメッセージを表示 sendタブ
    - systemタブ: 機能についてのメッセージを表示 送信したメッセージを表示
receiveタブ
受信したメッセージを表示
systemタブ
機能についてのメッセージを表示
  - Configウィンドウ configウィンドウ
   - UIタブ UIタブ
    - Transparency: ウィンドウの透過度の調整 Transparency: ウィンドウの透過度の調整
    - Appearance Theme: ウィンドウテーマを選択 Appearance Theme: ウィンドウテーマを選択
    - UI Scaling: UIサイズを調整 UI Scaling: UIサイズを調整
    - Font Family: 表示フォントを選択 Font Family: 表示フォントを選択
   - Translationタブ (New!) UI Language: UIの表示言語を選択
    - Select Translator: 翻訳エンジンの変更 Translationタブ
    - Send Language: 送信するメッセージに対して翻訳する言語[source, target]を選択 Select Translator: 翻訳エンジンの変更
    - Receive Language: 受信したメッセージに対して翻訳する言語[source, target]を選択 Send Language: 送信するメッセージに対して翻訳する言語[source, target]を選択
   - Transcriptionタブ Receive Language: 受信したメッセージに対して翻訳する言語[source, target]を選択
    - Input Mic Device: マイクを選択 Transcriptionタブ
    - Input Mic Voice Language: 入力する音声の言語 (New!) Input Mic Host: マイクのホストAPIを選択
    - Input Mic Energy Threshold: 音声取得のしきい値 Input Mic Device: マイクを選択
    - Input Mic Dynamic Energy Threshold: 音声取得のしきい値の自動調整 Input Mic Voice Language: 入力する音声の言語
    - Input Mic Record Timeout: 音声の区切りの無音時間 Input Mic Energy Threshold: 音声取得のしきい値
    - Input Mic Max Phrases: 保留する単語の上限 (New!) Check threshold point: Input Mic Energy Thresholdのしきい値を視覚化
    - Input Speaker Device: スピーカーを選択 Input Mic Dynamic Energy Threshold: 音声取得のしきい値の自動調整
    - Input Speaker Voice Language: 受信する音声の言語 Input Mic Record Timeout: 音声の区切りの無音時間
    - Input Speaker Energy Threshold: 音声取得のしきい値 Input Mic Phase Timeout: 文字起こしする音声時間の上限
    - Input Speaker Dynamic Energy Threshold: 音声取得のしきい値の自動調整 Input Mic Max Phrases: 保留する単語の上限
    - Input Speaker Record Timeout: 音声の区切りの無音時間 (New!) Input Mic Word Filter: MICの文字起こし時にWord Filterで設定した文字が入っていた場合にChatboxに表示しない (ex AAA,BBB,CCC)
    - Input Speaker Max Phrases: 保留する単語の上限 Input Speaker Device: スピーカーを選択
  - Parameterタブ Input Speaker Voice Language: 受信する音声の言語
    - OSC IP address: 変更不要 Input Speaker Energy Threshold: 音声取得のしきい値
    - OSC port: 変更不要 (New!) Check threshold point: (New!)Input Speaker Energy Thresholdのしきい値を視覚化
    - DeepL Auth key: DeepLの認証キーの設定 Input Speaker Dynamic Energy Threshold: 音声取得のしきい値の自動調整
    - Message Format: 送信するメッセージのデコレーションの設定 Input Speaker Record Timeout: 音声の区切りの無音時間
     - [message]がメッセージボックスに記入したメッセージに置換される Input Speaker Phase Timeout: 文字起こしする音声時間の上限
     - [translation]が翻訳されたメッセージに置換される Input Speaker Max Phrases: 保留する単語の上限
     - 初期フォーマット:"[message]([translation])" Parameterタブ
  - Othersタブ OSC IP address: 変更不要
    - Auto clear chat box: チャット送信時にチャットボックスを空にする OSC port: 変更不要
DeepL Auth key: DeepLの認証キーの設定
Message Format: 送信するメッセージのデコレーションの設定
[message]がメッセージボックスに記入したメッセージに置換される
[translation]が翻訳されたメッセージに置換される
初期フォーマット:"[message]([translation])"
Othersタブ
(New!) Auto clear chat box: メッセージ送信後に書き込んだメッセージを空にする
 設定の初期化 設定の初期化
  - config.jsonを削除 config.jsonを削除
お問い合わせ # お問い合わせ
要望などはTwitterまで 要望などはTwitterまで
https://twitter.com/misya_ai https://twitter.com/misya_ai
アップデート履歴 # アップデート履歴
[2023-05-29: v0.1b] v0.1b リリース [2023-05-29: v0.1b] v0.1b リリース
[2023-05-30: v0.2b] [2023-05-30: v0.2b]
- configボタンをギアアイコンに変更 - configボタンをギアアイコンに変更
@@ -99,6 +110,15 @@ https://twitter.com/misya_ai
- 文字起こしの処理の軽量化 - 文字起こしの処理の軽量化
[2023-07-05: v1.2] [2023-07-05: v1.2]
- 文字起こし精度の向上 - 文字起こし精度の向上
[2023-07-21: v1.3]
- UIの表示言語を日本語/英語を選択できる機能を追加
- Energy Thresholdの視覚化機能を追加
- 文字起こしの誤認識対策のため、Word Filterを追加
- WASAPI以外のHostAPIでもマイクとして使用できるようにHostAPIを選択できる機能を追加
- メッセージ送信後に書き込んだメッセージを空にするか選択できる機能を追加
- バグ対策のため、translation/voice2chatbox/speaker2log/foregroundは起動時はOFFになるように変更
- バグ対策のため、スピーカーについて既定デバイス以外を選択した時にERRORが出るように変更
- 半角入力時に一部の文字が書き込めないバグを修正
# 注意事項 # 注意事項
再配布とかはやめてね 再配布とかはやめてね

View File

@@ -101,17 +101,20 @@ ja:
label_input_mic_device: "マイク入力デバイス" label_input_mic_device: "マイク入力デバイス"
label_input_mic_voice_language: "マイクで話す言語" label_input_mic_voice_language: "マイクで話す言語"
label_input_mic_energy_threshold: "音声取得のしきい値" label_input_mic_energy_threshold: "音声取得のしきい値"
checkbox_input_mic_threshold_check: "音声取得のしきい値の視覚化"
label_input_mic_dynamic_energy_threshold: "音声取得のしきい値の自動調整" label_input_mic_dynamic_energy_threshold: "音声取得のしきい値の自動調整"
label_input_mic_record_timeout: "マイク音声の区切りの無音時間" label_input_mic_record_timeout: "マイク音声の区切りの無音時間"
# label_input_mic_phrase_timeout: "" label_input_mic_phrase_timeout: "文字起こしする音声時間の上限"
label_input_mic_max_phrases: "保留する単語の上限(マイク)" label_input_mic_max_phrases: "保留する単語の上限(マイク)"
label_input_mic_word_filter: "ワードフィルタ"
label_input_speaker_device: "スピーカー(聞き取りたいデバイス)" label_input_speaker_device: "スピーカー(聞き取りたいデバイス)"
label_input_speaker_voice_language: "聞き取る音声の言語" label_input_speaker_voice_language: "聞き取る音声の言語"
label_input_speaker_energy_threshold: "音声取得のしきい値" label_input_speaker_energy_threshold: "音声取得のしきい値"
checkbox_input_speaker_threshold_check: "音声取得のしきい値の視覚化"
label_input_speaker_dynamic_energy_threshold: "音声取得のしきい値の自動調整" label_input_speaker_dynamic_energy_threshold: "音声取得のしきい値の自動調整"
label_input_speaker_record_timeout: "スピーカー音声の区切りの無音時間" label_input_speaker_record_timeout: "スピーカー音声の区切りの無音時間"
# label_input_speaker_phrase_timeout: "" label_input_speaker_phrase_timeout: "文字起こしする音声時間の上限"
label_input_speaker_max_phrases: "保留する単語の上限(スピーカー)" label_input_speaker_max_phrases: "保留する単語の上限(スピーカー)"
# tab Parameter # tab Parameter

View File

@@ -14,7 +14,7 @@ from languages import translation_lang, transcription_lang, selectable_languages
from ctk_scrollable_dropdown import CTkScrollableDropdown from ctk_scrollable_dropdown import CTkScrollableDropdown
SCROLLABLE_DROPDOWN = True SCROLLABLE_DROPDOWN = False
class ToplevelWindowConfig(CTkToplevel): class ToplevelWindowConfig(CTkToplevel):
@@ -344,7 +344,11 @@ class ToplevelWindowConfig(CTkToplevel):
save_json(self.parent.PATH_CONFIG, "INPUT_MIC_MAX_PHRASES", self.parent.INPUT_MIC_MAX_PHRASES) save_json(self.parent.PATH_CONFIG, "INPUT_MIC_MAX_PHRASES", self.parent.INPUT_MIC_MAX_PHRASES)
def entry_input_mic_word_filters_callback(self, event): def entry_input_mic_word_filters_callback(self, event):
self.parent.INPUT_MIC_WORD_FILTER = self.entry_input_mic_word_filter.get().split(",") word_filter = self.entry_input_mic_word_filter.get()
if len(word_filter) > 0:
self.parent.INPUT_MIC_WORD_FILTER = self.entry_input_mic_word_filter.get().split(",")
else:
self.parent.INPUT_MIC_WORD_FILTER = []
self.parent.keyword_processor = KeywordProcessor() self.parent.keyword_processor = KeywordProcessor()
for f in self.parent.INPUT_MIC_WORD_FILTER: for f in self.parent.INPUT_MIC_WORD_FILTER:
self.parent.keyword_processor.add_keyword(f) self.parent.keyword_processor.add_keyword(f)
@@ -536,9 +540,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_appearance_theme_callback, command=self.optionmenu_appearance_theme_callback,
variable=StringVar(value=self.parent.APPEARANCE_THEME), variable=StringVar(value=self.parent.APPEARANCE_THEME),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_appearance_theme.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_appearance_theme.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_appearance_theme._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown appearance theme ## scrollableDropdown appearance theme
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -570,9 +574,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_ui_scaling_callback, command=self.optionmenu_ui_scaling_callback,
variable=StringVar(value=self.parent.UI_SCALING), variable=StringVar(value=self.parent.UI_SCALING),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_ui_scaling.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_ui_scaling.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_ui_scaling._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown ui scaling ## scrollableDropdown ui scaling
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -605,9 +609,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_font_family_callback, command=self.optionmenu_font_family_callback,
variable=StringVar(value=self.parent.FONT_FAMILY), variable=StringVar(value=self.parent.FONT_FAMILY),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_font_family.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_font_family.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_font_family._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown font family ## scrollableDropdown font family
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -640,9 +644,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_ui_language_callback, command=self.optionmenu_ui_language_callback,
variable=StringVar(value=selectable_languages[self.parent.UI_LANGUAGE]), variable=StringVar(value=selectable_languages[self.parent.UI_LANGUAGE]),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_ui_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_ui_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_ui_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown ui language ## scrollableDropdown ui language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -677,9 +681,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_translation_translator_callback, command=self.optionmenu_translation_translator_callback,
variable=StringVar(value=self.parent.CHOICE_TRANSLATOR), variable=StringVar(value=self.parent.CHOICE_TRANSLATOR),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_translation_translator.grid(row=row, column=1, columnspan=3, padx=padx, pady=pady, sticky="nsew") self.optionmenu_translation_translator.grid(row=row, column=1, columnspan=3, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_translation_translator._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown translation translator ## scrollableDropdown translation translator
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -713,9 +717,9 @@ class ToplevelWindowConfig(CTkToplevel):
values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()), values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()),
variable=StringVar(value=self.parent.INPUT_SOURCE_LANG), variable=StringVar(value=self.parent.INPUT_SOURCE_LANG),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_translation_input_source_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_translation_input_source_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_translation_input_source_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown translation input source language ## scrollableDropdown translation input source language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -748,9 +752,9 @@ class ToplevelWindowConfig(CTkToplevel):
values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()), values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()),
variable=StringVar(value=self.parent.INPUT_TARGET_LANG), variable=StringVar(value=self.parent.INPUT_TARGET_LANG),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_translation_input_target_language.grid(row=row, column=3, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_translation_input_target_language.grid(row=row, column=3, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_translation_input_target_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown translation input target language ## scrollableDropdown translation input target language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -784,9 +788,9 @@ class ToplevelWindowConfig(CTkToplevel):
values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()), values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()),
variable=StringVar(value=self.parent.OUTPUT_SOURCE_LANG), variable=StringVar(value=self.parent.OUTPUT_SOURCE_LANG),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_translation_output_source_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_translation_output_source_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_translation_output_source_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown translation output source language ## scrollableDropdown translation output source language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -819,9 +823,9 @@ class ToplevelWindowConfig(CTkToplevel):
values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()), values=list(translation_lang[self.parent.CHOICE_TRANSLATOR].keys()),
variable=StringVar(value=self.parent.OUTPUT_TARGET_LANG), variable=StringVar(value=self.parent.OUTPUT_TARGET_LANG),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_translation_output_target_language.grid(row=row, column=3, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_translation_output_target_language.grid(row=row, column=3, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_translation_output_target_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown translation output target language ## scrollableDropdown translation output target language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -856,9 +860,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_mic_host_callback, command=self.optionmenu_input_mic_host_callback,
variable=StringVar(value=self.parent.CHOICE_MIC_HOST), variable=StringVar(value=self.parent.CHOICE_MIC_HOST),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_input_mic_host.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_input_mic_host.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_input_mic_host._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown input mic device's host ## scrollableDropdown input mic device's host
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -890,9 +894,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_mic_device_callback, command=self.optionmenu_input_mic_device_callback,
variable=StringVar(value=self.parent.CHOICE_MIC_DEVICE), variable=StringVar(value=self.parent.CHOICE_MIC_DEVICE),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_input_mic_device.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_input_mic_device.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_input_mic_device._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown input mic device ## scrollableDropdown input mic device
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -924,9 +928,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_mic_voice_language_callback, command=self.optionmenu_input_mic_voice_language_callback,
variable=StringVar(value=self.parent.INPUT_MIC_VOICE_LANGUAGE), variable=StringVar(value=self.parent.INPUT_MIC_VOICE_LANGUAGE),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_input_mic_voice_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_input_mic_voice_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_input_mic_voice_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown input mic voice language ## scrollableDropdown input mic voice language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -1068,9 +1072,14 @@ class ToplevelWindowConfig(CTkToplevel):
font=CTkFont(family=self.parent.FONT_FAMILY) font=CTkFont(family=self.parent.FONT_FAMILY)
) )
self.label_input_mic_word_filter.grid(row=row, column=0, columnspan=1, padx=padx, pady=pady, sticky="nsw") self.label_input_mic_word_filter.grid(row=row, column=0, columnspan=1, padx=padx, pady=pady, sticky="nsw")
if len(self.parent.INPUT_MIC_WORD_FILTER) > 0:
textvariable=StringVar(value=",".join(self.parent.INPUT_MIC_WORD_FILTER))
else:
textvariable=None
self.entry_input_mic_word_filter = CTkEntry( self.entry_input_mic_word_filter = CTkEntry(
self.tabview_config.tab(config_tab_title_transcription), self.tabview_config.tab(config_tab_title_transcription),
textvariable=StringVar(value=",".join(self.parent.INPUT_MIC_WORD_FILTER)), textvariable=textvariable,
placeholder_text="AAA,BBB,CCC",
font=CTkFont(family=self.parent.FONT_FAMILY) font=CTkFont(family=self.parent.FONT_FAMILY)
) )
self.entry_input_mic_word_filter.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.entry_input_mic_word_filter.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
@@ -1091,9 +1100,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_speaker_device_callback, command=self.optionmenu_input_speaker_device_callback,
variable=StringVar(value=self.parent.CHOICE_SPEAKER_DEVICE), variable=StringVar(value=self.parent.CHOICE_SPEAKER_DEVICE),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_input_speaker_device.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_input_speaker_device.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_input_speaker_device._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown input speaker device ## scrollableDropdown input speaker device
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:
@@ -1125,9 +1134,9 @@ class ToplevelWindowConfig(CTkToplevel):
command=self.optionmenu_input_speaker_voice_language_callback, command=self.optionmenu_input_speaker_voice_language_callback,
variable=StringVar(value=self.parent.INPUT_SPEAKER_VOICE_LANGUAGE), variable=StringVar(value=self.parent.INPUT_SPEAKER_VOICE_LANGUAGE),
font=CTkFont(family=self.parent.FONT_FAMILY), font=CTkFont(family=self.parent.FONT_FAMILY),
dropdown_font=CTkFont(family=self.parent.FONT_FAMILY),
) )
self.optionmenu_input_speaker_voice_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew") self.optionmenu_input_speaker_voice_language.grid(row=row, column=1, columnspan=1, padx=padx, pady=pady, sticky="nsew")
self.optionmenu_input_speaker_voice_language._dropdown_menu.configure(font=CTkFont(family=self.parent.FONT_FAMILY))
## scrollableDropdown input speaker voice language ## scrollableDropdown input speaker voice language
if SCROLLABLE_DROPDOWN: if SCROLLABLE_DROPDOWN:

View File

@@ -18,7 +18,7 @@ class ToplevelWindowInformation(CTkToplevel):
font=CTkFont(family=self.parent.FONT_FAMILY) font=CTkFont(family=self.parent.FONT_FAMILY)
) )
self.textbox_information.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="nsew") self.textbox_information.grid(row=0, column=0, padx=(10, 10), pady=(10, 10), sticky="nsew")
textbox_information_message = """VRCT(v1.2) textbox_information_message = """VRCT(v1.3)
# 概要 # 概要
VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツールになります。 VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツールになります。
@@ -32,7 +32,7 @@ VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツ
(任意) (任意)
1. DeepLのAPIを使用するためにアカウント登録し、認証キーを取得する 1. DeepLのAPIを使用するためにアカウント登録し、認証キーを取得する
2. ギアアイコンのボタンでconfigウィンドウを開く 2. ギアアイコンのボタンでconfigウィンドウを開く
3. ParameterタブのDeepL Auth Keyに認証キーを記載し、フロッピーアイコンのボタンを押す 3. ParameterタブのDeepL Auth Keyに認証キーを記載
4. configウィンドウを閉じる 4. configウィンドウを閉じる
通常使用時 通常使用時
@@ -61,22 +61,29 @@ VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツ
Appearance Theme: ウィンドウテーマを選択 Appearance Theme: ウィンドウテーマを選択
UI Scaling: UIサイズを調整 UI Scaling: UIサイズを調整
Font Family: 表示フォントを選択 Font Family: 表示フォントを選択
(New!) UI Language: UIの表示言語を選択
Translationタブ Translationタブ
Select Translator: 翻訳エンジンの変更 Select Translator: 翻訳エンジンの変更
Send Language: 送信するメッセージに対して翻訳する言語[source, target]を選択 Send Language: 送信するメッセージに対して翻訳する言語[source, target]を選択
Receive Language: 受信したメッセージに対して翻訳する言語[source, target]を選択 Receive Language: 受信したメッセージに対して翻訳する言語[source, target]を選択
Transcriptionタブ Transcriptionタブ
(New!) Input Mic Host: マイクのホストAPIを選択
Input Mic Device: マイクを選択 Input Mic Device: マイクを選択
Input Mic Voice Language: 入力する音声の言語 Input Mic Voice Language: 入力する音声の言語
Input Mic Energy Threshold: 音声取得のしきい値 Input Mic Energy Threshold: 音声取得のしきい値
(New!) Check threshold point: Input Mic Energy Thresholdのしきい値を視覚化
Input Mic Dynamic Energy Threshold: 音声取得のしきい値の自動調整 Input Mic Dynamic Energy Threshold: 音声取得のしきい値の自動調整
Input Mic Record Timeout: 音声の区切りの無音時間 Input Mic Record Timeout: 音声の区切りの無音時間
Input Mic Phase Timeout: 文字起こしする音声時間の上限
Input Mic Max Phrases: 保留する単語の上限 Input Mic Max Phrases: 保留する単語の上限
(New!) Input Mic Word Filter: MICの文字起こし時にWord Filterで設定した文字が入っていた場合にChatboxに表示しない (ex AAA,BBB,CCC)
Input Speaker Device: スピーカーを選択 Input Speaker Device: スピーカーを選択
Input Speaker Voice Language: 受信する音声の言語 Input Speaker Voice Language: 受信する音声の言語
Input Speaker Energy Threshold: 音声取得のしきい値 Input Speaker Energy Threshold: 音声取得のしきい値
(New!) Check threshold point: (New!)Input Speaker Energy Thresholdのしきい値を視覚化
Input Speaker Dynamic Energy Threshold: 音声取得のしきい値の自動調整 Input Speaker Dynamic Energy Threshold: 音声取得のしきい値の自動調整
Input Speaker Record Timeout: 音声の区切りの無音時間 Input Speaker Record Timeout: 音声の区切りの無音時間
Input Speaker Phase Timeout: 文字起こしする音声時間の上限
Input Speaker Max Phrases: 保留する単語の上限 Input Speaker Max Phrases: 保留する単語の上限
Parameterタブ Parameterタブ
OSC IP address: 変更不要 OSC IP address: 変更不要
@@ -86,6 +93,8 @@ VRChatで使用されるChatBoxをOSC経由でメッセージを送信するツ
[message]がメッセージボックスに記入したメッセージに置換される [message]がメッセージボックスに記入したメッセージに置換される
[translation]が翻訳されたメッセージに置換される [translation]が翻訳されたメッセージに置換される
初期フォーマット:"[message]([translation])" 初期フォーマット:"[message]([translation])"
Othersタブ
(New!) Auto clear chat box: メッセージ送信後に書き込んだメッセージを空にする
設定の初期化 設定の初期化
config.jsonを削除 config.jsonを削除
@@ -118,6 +127,17 @@ https://twitter.com/misya_ai
- いくつかのバクを修正 - いくつかのバクを修正
- 翻訳/文字起こし言語の表記を略称からわかりやすい文字に変更 - 翻訳/文字起こし言語の表記を略称からわかりやすい文字に変更
- 文字起こしの処理の軽量化 - 文字起こしの処理の軽量化
[2023-07-05: v1.2]
- 文字起こし精度の向上
[2023-07-21: v1.3]
- UIの表示言語を日本語/英語を選択できる機能を追加
- Energy Thresholdの視覚化機能を追加
- 文字起こしの誤認識対策のため、Word Filterを追加
- WASAPI以外のHostAPIでもマイクとして使用できるようにHostAPIを選択できる機能を追加
- メッセージ送信後に書き込んだメッセージを空にするか選択できる機能を追加
- バグ対策のため、translation/voice2chatbox/speaker2log/foregroundは起動時はOFFになるように変更
- バグ対策のため、スピーカーについて既定デバイス以外を選択した時にERRORが出るように変更
- 半角入力時に一部の文字が書き込めないバグを修正
# 注意事項 # 注意事項
再配布とかはやめてね 再配布とかはやめてね