From 4e63fbaa3e90314bb65cfe294b70e8a5c8093dbc Mon Sep 17 00:00:00 2001 From: Raivis Dejus Date: Sun, 6 Apr 2025 21:14:13 +0300 Subject: [PATCH] Adding speaker identification --- .gitmodules | 3 + buzz/locale/ca_ES/LC_MESSAGES/buzz.po | 164 +- buzz/locale/da_DK/LC_MESSAGES/buzz.po | 164 +- buzz/locale/de_DE/LC_MESSAGES/buzz.po | 164 +- buzz/locale/en_US/LC_MESSAGES/buzz.po | 162 +- buzz/locale/es_ES/LC_MESSAGES/buzz.po | 166 +- buzz/locale/it_IT/LC_MESSAGES/buzz.po | 164 +- buzz/locale/ja_JP/LC_MESSAGES/buzz.po | 164 +- buzz/locale/lv_LV/LC_MESSAGES/buzz.po | 164 +- buzz/locale/nl/LC_MESSAGES/buzz.po | 1383 +++++++++-------- buzz/locale/pl_PL/LC_MESSAGES/buzz.po | 164 +- buzz/locale/uk_UA/LC_MESSAGES/buzz.po | 164 +- buzz/locale/zh_CN/LC_MESSAGES/buzz.po | 164 +- buzz/locale/zh_TW/LC_MESSAGES/buzz.po | 164 +- .../speaker_identification_widget.py | 535 +++++-- .../transcription_resizer_widget.py | 8 +- .../transcription_viewer_widget.py | 21 +- docs/docs/preferences.md | 2 +- docs/docs/usage/1_file_import.md | 2 + docs/docs/usage/5_speaker_identification.md | 9 + poetry.lock | 116 +- whisper_diarization | 1 + 22 files changed, 2619 insertions(+), 1429 deletions(-) create mode 100644 docs/docs/usage/5_speaker_identification.md create mode 160000 whisper_diarization diff --git a/.gitmodules b/.gitmodules index fa83e220..2655e2b2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "whisper.cpp"] path = whisper.cpp url = https://github.com/ggerganov/whisper.cpp +[submodule "whisper_diarization"] + path = whisper_diarization + url = https://github.com/MahmoudAshraf97/whisper-diarization diff --git a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po index 3875e955..d6fcdda4 100644 --- a/buzz/locale/ca_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/ca_ES/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2023-02-15 05:01+0000\n" "Last-Translator: Jordi Mas i Hernàndez \n" "Language-Team: Catalan \n" @@ -73,122 +73,127 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "Idioma:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "Enregistrament en viu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -527,56 +532,131 @@ msgstr "" msgid "Timestamps" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Obre una transcripció" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Desa el fitxer" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "Desa el fitxer" @@ -684,10 +764,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/da_DK/LC_MESSAGES/buzz.po b/buzz/locale/da_DK/LC_MESSAGES/buzz.po index d4e6110d..2ee281a6 100644 --- a/buzz/locale/da_DK/LC_MESSAGES/buzz.po +++ b/buzz/locale/da_DK/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: \n" "Last-Translator: Ole Guldberg2 \n" "Language-Team: \n" @@ -70,103 +70,108 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 #, fuzzy msgid "Ukrainian" msgstr "tilbageværende" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "Sprog:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "Skriftypestørrelse" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "Test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "OpenAI API-nøgle" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "OpenAI base-URL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "Standard eksport filnavn" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "Slå transkription af live optagelse eksport til" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Gennemse" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "Eksportmappe" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "Live optagelsesmode" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "OpenAI API Nøgle test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -174,12 +179,12 @@ msgstr "" "Din API nøgle er gyldig. Buzz vil benytte nøglen til at anvende Whisper API " "transkription og AI oversættelser." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 #, fuzzy msgid "Invalid API key" msgstr "Ugyldig API-nøgle" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -187,11 +192,11 @@ msgstr "" "API supporterer kun base64 tegn (A-Za-z0-9+/=_-). Andre tegn i API-nøglen " "kan guve fejl. " -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "Vælg eksport-mappe" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -524,56 +529,131 @@ msgstr "Vis" msgid "Timestamps" msgstr "Tidsstempler" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "Eksporter" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "Oversæt" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "Behandel størrelse" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "API-nøgle påkrævet" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "Indtast venligst OpenAI API-nøgle i indstillinger" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "Størrelsesindstillinger" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "Ønskede undertekst længde" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "Sammenfletningsindstillinger" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "Sammenflet ved hul" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "Split ved punktum" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "Split ved max længde" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "Sammenflet" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Åben transkription" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Gem fil" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "Gem fil" @@ -681,10 +761,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/de_DE/LC_MESSAGES/buzz.po b/buzz/locale/de_DE/LC_MESSAGES/buzz.po index 06e42f03..95ee9fa3 100644 --- a/buzz/locale/de_DE/LC_MESSAGES/buzz.po +++ b/buzz/locale/de_DE/LC_MESSAGES/buzz.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:13+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2025-03-05 14:41+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -72,100 +72,105 @@ msgid "Danish" msgstr "Dänisch" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "Niederländisch" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "Deutsch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "Spanisch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "Italienisch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "Japanisch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "Lettisch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "Polnisch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "Ukrainisch" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "Chinesisch (vereinfacht)" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "Chinesisch (traditionell)" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "Neustart erforderlich!" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 msgid "Ui Language" msgstr "Sprache der Benutzeroberfläche" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "Schriftgröße" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "Test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "OpenAI-API-Schlüssel" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "OpenAI-Basis-URL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "Standardname der Exportdatei" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "Export von Live-Aufnahmetranskriptionen aktivieren" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Durchsuchen" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "Exportordner" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 msgid "Live recording mode" msgstr "Live-Aufnahmemodus" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "OpenAI-API-Schlüssel Test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -173,11 +178,11 @@ msgstr "" "Ihr API-Schlüssel ist gültig. Buzz verwendet diesen Schlüssel, um Whisper-" "API-Transkriptionen und KI-Übersetzungen durchzuführen." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "Ungültiger API-Schlüssel" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -185,11 +190,11 @@ msgstr "" "Die API unterstützt nur Base64-Zeichen (A-Za-z0-9+/=_-). Andere Zeichen im " "API-Schlüssel können Fehler verursachen." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "Exportordner auswählen" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -523,56 +528,131 @@ msgstr "Anzeigen" msgid "Timestamps" msgstr "Zeitstempel" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "Export" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "Übersetzen" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "Größe ändern" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "API-Schlüssel erforderlich" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "Bitte geben Sie den OpenAI-API-Schlüssel in den Einstellungen ein" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "Größenänderungsoptionen" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "Gewünschte Untertitellänge" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "Zusammenführungsoptionen" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "Nach Abstand zusammenführen" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "Durch Satzzeichen getrennt" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "Aufgeteilt nach maximaler Länge" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "Vereinigen" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Transkript öffnen" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Datei speichern" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "Datei speichern" @@ -681,10 +761,6 @@ msgstr "Portugiesisch" msgid "Turkish" msgstr "Türkisch" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "Niederländisch" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "Arabisch" diff --git a/buzz/locale/en_US/LC_MESSAGES/buzz.po b/buzz/locale/en_US/LC_MESSAGES/buzz.po index 835f4567..ff7b27f1 100644 --- a/buzz/locale/en_US/LC_MESSAGES/buzz.po +++ b/buzz/locale/en_US/LC_MESSAGES/buzz.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -73,120 +73,125 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 msgid "Ui Language" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 msgid "Live recording mode" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -512,56 +517,129 @@ msgstr "" msgid "Timestamps" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +msgid "5/9 Preparing transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +msgid "Save" +msgstr "" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "" @@ -663,10 +741,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/es_ES/LC_MESSAGES/buzz.po b/buzz/locale/es_ES/LC_MESSAGES/buzz.po index a2310fa5..9fde4c25 100644 --- a/buzz/locale/es_ES/LC_MESSAGES/buzz.po +++ b/buzz/locale/es_ES/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2023-11-09 04:35-0600\n" "Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: \n" @@ -74,124 +74,129 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" # automatic translation -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "Idioma:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "" # automatic translation -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "Grabación en vivo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -563,56 +568,133 @@ msgstr "" msgid "Timestamps" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +# automatic translation +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Abrir transcripción" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +# automatic translation +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Guardar archivo" + # automatic translation #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" @@ -729,10 +811,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/it_IT/LC_MESSAGES/buzz.po b/buzz/locale/it_IT/LC_MESSAGES/buzz.po index 6b4ff81a..cfeb70b9 100644 --- a/buzz/locale/it_IT/LC_MESSAGES/buzz.po +++ b/buzz/locale/it_IT/LC_MESSAGES/buzz.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: buzz\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2024-11-24 13:22+0100\n" "Language-Team: (Italiano) Albano Battistella \n" "Language: it_IT\n" @@ -72,102 +72,107 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 #, fuzzy msgid "Ukrainian" msgstr "rimanente" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "Lingua:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "Dimensione del carattere" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "Test" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "Chiave API OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "URL di base di OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "Nome file di esportazione predefinito" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "Abilita l'esportazione della trascrizione della registrazione live" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Sfoglia" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "Esporta cartella" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 msgid "Live recording mode" msgstr "Modalità di registrazione in diretta" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "Test della chiave API OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -175,11 +180,11 @@ msgstr "" "La tua chiave API è valida. Buzz utilizzerà questa chiave per eseguire le " "trascrizioni API Whisper e le traduzioni AI." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "Chiave API non valida" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 #, fuzzy msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " @@ -188,11 +193,11 @@ msgstr "" "L'API supporta solo caratteri base64 (A-Za-z0-9+/=). Altri caratteri nella " "chiave API potrebbero causare errori." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "Seleziona la cartella di esportazione" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -525,57 +530,132 @@ msgstr "Visualizza" msgid "Timestamps" msgstr "Timestamp" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "Esporta" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "Tradurre" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "Ridimensionare" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "Chiave API richiesta" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "Inserisci la chiave API OpenAI nelle preferenze" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 #, fuzzy msgid "Resize Options" msgstr "Ridimensionare" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "Lunghezza desiderata dei sottotitoli" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Apri trascrizione" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Salva file" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "Salva file" @@ -683,10 +763,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po index 40d941d4..c9df9672 100644 --- a/buzz/locale/ja_JP/LC_MESSAGES/buzz.po +++ b/buzz/locale/ja_JP/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: \n" "Last-Translator: nunawa <71294849+nunawa@users.noreply.github.com>\n" "Language-Team: \n" @@ -68,103 +68,108 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 #, fuzzy msgid "Ukrainian" msgstr "残り" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "言語:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "フォントサイズ" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "テスト" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "OpenAI APIキー" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "OpenAI ベースURL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "デフォルトの出力ファイル名" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "ライブ録音書き起こしの出力を有効にする" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "参照" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "出力フォルダ" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "ライブ録音" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "OpenAI APIキー テスト" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -172,22 +177,22 @@ msgstr "" "あなたのAPIキーは有効です。Buzzはこのキーを使ってWhisper APIの書き起こしとAI" "翻訳を行います。" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 #, fuzzy msgid "Invalid API key" msgstr "OpenAI APIキー" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "出力フォルダを選択" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -520,57 +525,132 @@ msgstr "表示" msgid "Timestamps" msgstr "タイムスタンプ" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "出力" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "翻訳" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "リサイズ" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "APIキーが必要" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "設定画面でOpenAI APIキーを入力してください" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 #, fuzzy msgid "Resize Options" msgstr "リサイズ" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "希望する字幕の長さ" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "文字起こしを開く" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "ファイルを保存" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "ファイルを保存" @@ -676,10 +756,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po index 6ec1e8be..0185b8c4 100644 --- a/buzz/locale/lv_LV/LC_MESSAGES/buzz.po +++ b/buzz/locale/lv_LV/LC_MESSAGES/buzz.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" -"PO-Revision-Date: 2025-02-22 23:44+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" +"PO-Revision-Date: 2025-04-06 21:04+0300\n" "Last-Translator: \n" "Language-Team: \n" "Language: lv_LV\n" @@ -74,102 +74,107 @@ msgid "Danish" msgstr "Dāņu" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "Holandiešu" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "Vācu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "Spāņu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "Itāļu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "Japāņu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "Latviešu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "Poļu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "Ukraiņu" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "Ķīniešu (vienkāršotā)" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "Ķīniešu (tradicionālā)" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "Jāpārstartē!" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 msgid "Ui Language" msgstr "Programmas valoda" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "Fonta izmērs" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "Pārbaudīt" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "OpenAI API atslēga" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "OpenAI adrese" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "Eksporta fails" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "Eksportēt dzīvā ieraksta transkriptus" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Izvēlēties" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "Eksportēt mapē" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 msgid "Live recording mode" msgstr "" "Dzīvā ieraksta\n" "režīms" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "OpenAI API atslēgas pārbaude" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -177,11 +182,11 @@ msgstr "" "Jūsu API atslēga ir derīga. Buzz izmantos to runas atpazīšanai ar Whisper " "API un tulkošanai." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "Nederīga API atslēga" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." @@ -189,11 +194,11 @@ msgstr "" "API atbalsta tikai base64 simbolus (A-Za-z0-9+/=_-). Citi simboli API " "atslēgā var radīt kļūdas." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "Izvēlieties mapi kurā eksportēt" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -526,56 +531,129 @@ msgstr "Skats" msgid "Timestamps" msgstr "Laiks" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "Eksportēt" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "Tulkot" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "Mainīt garumu" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "Noteikt runātājus" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "API atslēgas kļūda" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "Lūdzu ievadiet OpenAI API atslēgu iestatījumos" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "Garuma maiņas iestatījumi" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "Vēlamais teksta garums" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "Apvienošanas iestatījumi" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "Apvienot pēc attāluma" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "Dalīt pie pieturzīmēm" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "Dalīt pie maksimālā garuma" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "Apvienot" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "1/9 Apkopo transkripcijas" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "2/9 Ielādē audio" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "3/9 Ielādē identifikācijas modeli" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "4/9 Sagatavo audio" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +msgid "5/9 Preparing transcripts" +msgstr "5/9 Sagatavo transkripcijas" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "6/9 Apstrādā audio" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "7/9 Nosaka runātājus" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "8/9 Marķē runātāju teikumus" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "9/9 Runātāju noteikšana pabeigta" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "1. solis: Runātāju noteikšana" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "Noteikt" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "Gatavs noteikt runātājus" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "Audio datne nav atrasta" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "2. solis: Identificēt runātājus" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "Atskaņot paraugu" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "Apvienot runātāja teikumus" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +msgid "Save" +msgstr "Saglabāt" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "Saglabāt failu" @@ -681,10 +759,6 @@ msgstr "Portugāļu" msgid "Turkish" msgstr "Turku" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "Holandiešu" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "Arābu" diff --git a/buzz/locale/nl/LC_MESSAGES/buzz.po b/buzz/locale/nl/LC_MESSAGES/buzz.po index 64d981e0..f6e2310d 100644 --- a/buzz/locale/nl/LC_MESSAGES/buzz.po +++ b/buzz/locale/nl/LC_MESSAGES/buzz.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-16 17:47+0100\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2025-03-20 18:30+0100\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: none\n" @@ -19,92 +19,726 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.5\n" -#: buzz/model_loader.py:499 buzz/widgets/main_window.py:297 -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269 -msgid "Error" -msgstr "Foutmelding" - -#: buzz/model_loader.py:528 -msgid "A connection error occurred" -msgstr "Er is een verbindingsfout opgetreden" - -#: buzz/settings/recording_transcriber_mode.py:5 -msgid "Append below" -msgstr "Onderaan toevoegen" - -#: buzz/settings/recording_transcriber_mode.py:6 -msgid "Append above" -msgstr "Bovenaan toevoegen" - -#: buzz/settings/recording_transcriber_mode.py:7 -msgid "Append and correct" -msgstr "Toevoegen en corrigeren" - -#: buzz/settings/shortcut.py:17 -msgid "Open Record Window" -msgstr "Opnamevenster openen" - -#: buzz/settings/shortcut.py:18 -msgid "Import File" -msgstr "Bestand importeren" - -#: buzz/settings/shortcut.py:19 buzz/widgets/import_url_dialog.py:19 +#: buzz/widgets/import_url_dialog.py:19 buzz/settings/shortcut.py:19 msgid "Import URL" msgstr "Url importeren" -#: buzz/settings/shortcut.py:20 -msgid "Open Preferences Window" -msgstr "Instellingenvenster openen" +#: buzz/widgets/import_url_dialog.py:22 +msgid "https://example.com/audio.mp3" +msgstr "https://voorbeeld.nl/audio.mp3" -#: buzz/settings/shortcut.py:22 -msgid "View Transcript Text" -msgstr "Transcriptie bekijken" +#: buzz/widgets/import_url_dialog.py:28 +#: buzz/widgets/preferences_dialog/preferences_dialog.py:69 +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245 +#: buzz/widgets/transcriber/advanced_settings_dialog.py:97 +#: buzz/widgets/main_window.py:240 +msgid "Ok" +msgstr "Oké" -#: buzz/settings/shortcut.py:23 -msgid "View Transcript Translation" -msgstr "Getranscribeerde vertaling bekijken" +#: buzz/widgets/import_url_dialog.py:29 +#: buzz/widgets/preferences_dialog/preferences_dialog.py:70 +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246 +#: buzz/widgets/model_download_progress_dialog.py:29 +#: buzz/widgets/main_window.py:241 +msgid "Cancel" +msgstr "Annuleren" -#: buzz/settings/shortcut.py:24 -msgid "View Transcript Timestamps" -msgstr "Getranscribeerde tijdstippen bekijken" +#: buzz/widgets/import_url_dialog.py:34 +msgid "URL:" +msgstr "Url:" -#: buzz/settings/shortcut.py:26 buzz/widgets/main_window.py:229 -#: buzz/widgets/main_window_toolbar.py:71 -msgid "Clear History" -msgstr "Geschiedenis wissen" +#: buzz/widgets/import_url_dialog.py:44 +msgid "Invalid URL" +msgstr "Ongeldige url" -#: buzz/settings/shortcut.py:27 buzz/widgets/main_window_toolbar.py:63 +#: buzz/widgets/import_url_dialog.py:44 +msgid "The URL you entered is invalid." +msgstr "De ingevoerde url is ongeldig." + +#: buzz/widgets/preferences_dialog/shortcuts_editor_preferences_widget.py:29 +msgid "Reset to Defaults" +msgstr "Standaardwaarden" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:35 +#: buzz/transcriber/transcriber.py:38 +msgid "English" +msgstr "Engels" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:36 +#: buzz/transcriber/transcriber.py:49 +msgid "Catalan" +msgstr "Catalaans" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:37 +#: buzz/transcriber/transcriber.py:64 +msgid "Danish" +msgstr "Deens" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "Nederlands" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/transcriber/transcriber.py:40 +msgid "German" +msgstr "Duits" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/transcriber/transcriber.py:41 +msgid "Spanish" +msgstr "Spaans" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/transcriber/transcriber.py:53 +msgid "Italian" +msgstr "Italiaans" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/transcriber/transcriber.py:45 +msgid "Japanese" +msgstr "Japans" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/transcriber/transcriber.py:80 +msgid "Latvian" +msgstr "Lets" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/transcriber/transcriber.py:48 +msgid "Polish" +msgstr "Pools" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/transcriber/transcriber.py:59 +msgid "Ukrainian" +msgstr "Oekraïens" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +msgid "Chinese (Simplified)" +msgstr "Chinees (Vereenvoudigd)" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 +msgid "Chinese (Traditional)" +msgstr "Chinees (Traditioneel)" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 +msgid "Restart required!" +msgstr "Herstart vereist!" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 +msgid "Ui Language" +msgstr "Programmataal" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 +msgid "Font Size" +msgstr "Tekstgrootte" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 +msgid "Test" +msgstr "Uitproberen" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 +msgid "OpenAI API key" +msgstr "OpenAI-api-sleutel" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 +msgid "OpenAI base url" +msgstr "OpenAI-hoofd-url" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 +msgid "Default export file name" +msgstr "Standaardnaam van export" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 +msgid "Enable live recording transcription export" +msgstr "Transcripties van opnames onmiddelijk exporteren" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 +msgid "Browse" +msgstr "Bladeren" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 +msgid "Export folder" +msgstr "Exportmap" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 +msgid "Live recording mode" +msgstr "Live-opnamemodus" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 +msgid "OpenAI API Key Test" +msgstr "OpenAI-api-sleuteltest" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 +msgid "" +"Your API key is valid. Buzz will use this key to perform Whisper API " +"transcriptions and AI translations." +msgstr "" +"De api-sleutel is geldig. Buzz zal deze sleutel gebruiken om transcripties " +"en AI-vertalingen op te vragen bij Whisper." + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +msgid "Invalid API key" +msgstr "Ongeldige api-sleutel" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 +msgid "" +"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " +"API key may cause errors." +msgstr "" +"De api ondersteunt alleen base64-tekens (A–Za–z0–9+/=_-). Andere tekens " +"kunnen problemen veroorzaken." + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 +msgid "Select Export Folder" +msgstr "Kies een exportmap" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 +msgid "" +"OpenAI API returned invalid response. Please check the API url or your key. " +"Transcription and translation may still work if the API does not support key " +"validation." +msgstr "" +"De api gaf een ongeldig antwoord terug. Controleer de url of sleutel. " +"Transcriptie en vertaling werkt mogelijk nog steeds als de api niet om " +"sleutelverificatie vraagt." + +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:42 +msgid "Enable folder watch" +msgstr "Map bijhouden" + +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:94 +msgid "Input folder" +msgstr "Invoermap" + +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:95 +msgid "Output folder" +msgstr "Uitvoermap" + +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:105 +msgid "Select Input Folder" +msgstr "Kies een invoermap" + +#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:114 +msgid "Select Output Folder" +msgstr "Kies een uitvoermap" + +#: buzz/widgets/preferences_dialog/preferences_dialog.py:43 +msgid "Preferences" +msgstr "Instellingen" + +#: buzz/widgets/preferences_dialog/preferences_dialog.py:50 +msgid "General" +msgstr "Algemeen" + +#: buzz/widgets/preferences_dialog/preferences_dialog.py:53 +msgid "Models" +msgstr "Modellen" + +#: buzz/widgets/preferences_dialog/preferences_dialog.py:57 +msgid "Shortcuts" +msgstr "Sneltoetsen" + +#: buzz/widgets/preferences_dialog/preferences_dialog.py:63 +msgid "Folder Watch" +msgstr "Map bijhouden" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:70 +msgid "Group" +msgstr "Groep" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:82 +msgid "Huggingface ID of a Faster whisper model" +msgstr "Huggingface-id of een sneller Whisper-model" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94 +msgid "Download" +msgstr "Downloaden" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99 +msgid "Show file location" +msgstr "Bestandslocatie tonen" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107 +msgid "Delete" +msgstr "Verwijderen" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138 +msgid "Downloaded" +msgstr "Gedownload" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143 +msgid "Available for Download" +msgstr "Beschikbaar" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164 +msgid "Download link to Whisper.cpp ggml model file" +msgstr "Downloadlink van Whisper.cpp ggml-modelbestand" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239 +msgid "Delete Model" +msgstr "Model verwijderen" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240 +msgid "Are you sure you want to delete the selected model?" +msgstr "Weet u zeker dat u het gekozen model wilt verwijderen?" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268 +msgid "Download failed" +msgstr "Het downloaden is mislukt" + +#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269 +#: buzz/widgets/main_window.py:297 buzz/model_loader.py:499 +msgid "Error" +msgstr "Foutmelding" + +#: buzz/widgets/record_button.py:10 buzz/widgets/record_button.py:17 +#: buzz/widgets/main_window_toolbar.py:37 +msgid "Record" +msgstr "Opnemen" + +#: buzz/widgets/record_button.py:21 +msgid "Stop" +msgstr "Stoppen" + +#: buzz/widgets/transcriber/languages_combo_box.py:35 +#: buzz/transcriber/transcriber.py:160 +msgid "Detect Language" +msgstr "Taal herkennen" + +#: buzz/widgets/transcriber/file_transcriber_widget.py:79 +msgid "Run" +msgstr "Uitvoeren" + +#: buzz/widgets/transcriber/transcription_options_group_box.py:92 +msgid "Model:" +msgstr "Model:" + +#: buzz/widgets/transcriber/transcription_options_group_box.py:104 +msgid "First time use of a model may take up to several minutest to load." +msgstr "" +"Let op: de eerste keer kan het enkele minuten duren voordat het model " +"geladen is." + +#: buzz/widgets/transcriber/transcription_options_group_box.py:114 +msgid "Api Key:" +msgstr "Api-sleutel:" + +#: buzz/widgets/transcriber/transcription_options_group_box.py:115 +msgid "Task:" +msgstr "Taak:" + +#: buzz/widgets/transcriber/transcription_options_group_box.py:116 +msgid "Language:" +msgstr "Taal:" + +#: buzz/widgets/transcriber/initial_prompt_text_edit.py:10 +msgid "Enter prompt..." +msgstr "Voer een tekst in…" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:33 +msgid "Advanced Settings" +msgstr "Geavanceerde instellingen" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:37 +msgid "Speech recognition settings" +msgstr "Spraakherkenningsinstellingen" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:46 +msgid "Comma-separated, e.g. \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\"" +msgstr "Kommagescheiden, bijv. ‘0.0, 0.2, 0.4, 0.6, 0.8, 1.0’" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:55 +msgid "Temperature:" +msgstr "Temperatuur:" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:66 +msgid "Initial Prompt:" +msgstr "Hoofdinvoer:" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:68 +msgid "Translation settings" +msgstr "Vertaalinstellingen" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:72 +msgid "Enable AI translation" +msgstr "AI-vertaling inschakelen" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:84 +msgid "AI model:" +msgstr "AI-model:" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:88 +msgid "Enter instructions for AI on how to translate..." +msgstr "Voer vertaalinstructies in…" + +#: buzz/widgets/transcriber/advanced_settings_dialog.py:92 +msgid "Instructions for AI:" +msgstr "AI-instructies:" + +#: buzz/widgets/transcriber/file_transcription_form_widget.py:43 +msgid "Word-level timings" +msgstr "Woordherkenningstimings" + +#: buzz/widgets/transcriber/file_transcription_form_widget.py:54 +msgid "Extract speech" +msgstr "Spraak extraheren" + +#: buzz/widgets/transcriber/file_transcription_form_widget.py:77 +msgid "Export:" +msgstr "Exporteren:" + +#: buzz/widgets/transcriber/hugging_face_search_line_edit.py:37 +msgid "Huggingface ID of a model" +msgstr "Huggingface-id van een model" + +#: buzz/widgets/transcriber/advanced_settings_button.py:9 +msgid "Advanced..." +msgstr "Geavanceerd…" + +#: buzz/widgets/main_window_toolbar.py:43 +msgid "New File Transcription" +msgstr "Nieuwe bestandstranscriptie" + +#: buzz/widgets/main_window_toolbar.py:50 +msgid "New URL Transcription" +msgstr "Nieuwe url-transcriptie" + +#: buzz/widgets/main_window_toolbar.py:57 +msgid "Open Transcript" +msgstr "Transcriptie openen" + +#: buzz/widgets/main_window_toolbar.py:63 buzz/settings/shortcut.py:27 msgid "Cancel Transcription" msgstr "Transcriptie wissen" +#: buzz/widgets/main_window_toolbar.py:71 buzz/widgets/main_window.py:229 +#: buzz/settings/shortcut.py:26 +msgid "Clear History" +msgstr "Geschiedenis wissen" + +#: buzz/widgets/transcription_tasks_table_widget.py:66 +msgid "In Progress" +msgstr "In behandeling" + +#: buzz/widgets/transcription_tasks_table_widget.py:69 +msgid "Completed" +msgstr "Afgerond" + +#: buzz/widgets/transcription_tasks_table_widget.py:76 +msgid "Failed" +msgstr "Mislukt" + +#: buzz/widgets/transcription_tasks_table_widget.py:79 +msgid "Canceled" +msgstr "Afgebroken" + +#: buzz/widgets/transcription_tasks_table_widget.py:81 +msgid "Queued" +msgstr "In wachtrij" + +#: buzz/widgets/transcription_tasks_table_widget.py:88 +msgid "File Name / URL" +msgstr "Bestandsnaam/Url" + +#: buzz/widgets/transcription_tasks_table_widget.py:100 +msgid "Model" +msgstr "Model" + +#: buzz/widgets/transcription_tasks_table_widget.py:109 +msgid "Task" +msgstr "Taak" + +#: buzz/widgets/transcription_tasks_table_widget.py:118 +msgid "Status" +msgstr "Status" + +#: buzz/widgets/transcription_tasks_table_widget.py:126 +msgid "Date Added" +msgstr "Toegevoegd op" + +#: buzz/widgets/transcription_tasks_table_widget.py:137 +msgid "Date Completed" +msgstr "Afgerond op" + +#: buzz/widgets/recording_transcriber_widget.py:79 +msgid "Live Recording" +msgstr "Live-opname" + +#: buzz/widgets/recording_transcriber_widget.py:144 +msgid "Click Record to begin..." +msgstr "Klik op de opnameknop om te beginnen…" + +#: buzz/widgets/recording_transcriber_widget.py:147 +msgid "Waiting for AI translation..." +msgstr "Bezig met wachten op AI-vertaling…" + +#: buzz/widgets/recording_transcriber_widget.py:159 +msgid "Microphone:" +msgstr "Microfoon:" + +#: buzz/widgets/recording_transcriber_widget.py:526 +msgid "An error occurred while starting a new recording:" +msgstr "Er is een fout opgetreden tijdens het starten van de opname:" + +#: buzz/widgets/recording_transcriber_widget.py:530 +msgid "" +"Please check your audio devices or check the application logs for more " +"information." +msgstr "Controleer uw geluidsapparatuur of het programmalogboek." + +#: buzz/widgets/about_dialog.py:80 +msgid "Check for updates" +msgstr "Controleren op updates" + +#: buzz/widgets/about_dialog.py:109 +msgid "You're up to date!" +msgstr "De software is actueel!" + +#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:93 +msgid "Start" +msgstr "Begin" + +#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:94 +msgid "End" +msgstr "Einde" + +#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:95 +#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:34 +#: buzz/widgets/transcription_viewer/export_transcription_menu.py:30 +msgid "Text" +msgstr "Tekst" + +#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:96 +#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:40 +#: buzz/widgets/transcription_viewer/export_transcription_menu.py:31 +#: buzz/widgets/transcription_viewer/export_transcription_menu.py:64 +msgid "Translation" +msgstr "Vertaling" + +#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:26 +msgid "View" +msgstr "Bekijken" + +#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:46 +msgid "Timestamps" +msgstr "Tijdstippen" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 +msgid "Export" +msgstr "Exporteren" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 msgid "Translate" msgstr "Vertalen" +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 +msgid "Resize" +msgstr "Grootte" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 +msgid "API Key Required" +msgstr "Api-sleutel vereist" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 +msgid "Please enter OpenAI API Key in preferences" +msgstr "Voer de OpenAI-api-sleutel in in de instellingen" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 +msgid "Resize Options" +msgstr "Grootteopties" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 +msgid "Desired subtitle length" +msgstr "Voorkeurslengte van ondertiteling" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 +msgid "Merge Options" +msgstr "Samenvoegopties" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 +msgid "Merge by gap" +msgstr "Samenvoegen op basis van tussenruimte" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 +msgid "Split by punctuation" +msgstr "Splitsen op basis van leestekens" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 +msgid "Split by max length" +msgstr "Splitsen op basis van max. lengte" + +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 +msgid "Merge" +msgstr "Samenvoegen" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Transcriptie openen" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Bestand opslaan" + +#: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 +msgid "Save File" +msgstr "Bestand opslaan" + +#: buzz/widgets/transcription_viewer/export_transcription_menu.py:80 +msgid "Text files" +msgstr "Tekstbestanden" + +#: buzz/widgets/snap_notice.py:9 +msgid "Snap permission notice" +msgstr "Snap-rechten" + +#: buzz/widgets/snap_notice.py:13 +msgid "" +"Detected missing permissions, please check that snap permissions have been " +"granted" +msgstr "" +"Er ontbreken toegangsrechten - controleer of ze daadwerkelijk allemaal zijn " +"toegekend" + +#: buzz/widgets/snap_notice.py:16 +msgid "" +"To enable necessary permissions run the following commands in the terminal" +msgstr "" +"De rechten kunnen met behulp van deze terminalopdrachten worden verleend" + +#: buzz/widgets/snap_notice.py:27 +msgid "Close" +msgstr "Sluiten" + +#: buzz/widgets/model_download_progress_dialog.py:36 +msgid "Downloading model" +msgstr "Bezig met ophalen van model…" + +#: buzz/widgets/model_download_progress_dialog.py:37 +msgid "remaining" +msgstr "resterend" + +#: buzz/widgets/menu_bar.py:38 +msgid "Import File..." +msgstr "Bestand importeren…" + +#: buzz/widgets/menu_bar.py:41 +msgid "Import URL..." +msgstr "Url importeren…" + +#: buzz/widgets/menu_bar.py:44 +msgid "About" +msgstr "Over" + +#: buzz/widgets/menu_bar.py:48 +msgid "Preferences..." +msgstr "Instellingen…" + +#: buzz/widgets/menu_bar.py:51 buzz/widgets/menu_bar.py:61 +msgid "Help" +msgstr "Hulp" + +#: buzz/widgets/menu_bar.py:57 +msgid "File" +msgstr "Bestand" + +#: buzz/widgets/main_window.py:233 +msgid "" +"Are you sure you want to delete the selected transcription(s)? This action " +"cannot be undone." +msgstr "" +"Weet u zeker dat u de gekozen transcriptie(s) wilt verwijderen? Deze actie " +"is onomkeerbaar." + +#: buzz/widgets/main_window.py:261 +msgid "Select audio file" +msgstr "Kies een audiobestand" + +#: buzz/widgets/main_window.py:297 +msgid "Unable to save OpenAI API key to keyring" +msgstr "De OpenAI-api-sleutel kan niet worden bewaard in de sleutelbos" + #: buzz/transcriber/transcriber.py:25 msgid "Transcribe" msgstr "Transcriberen" -#: buzz/transcriber/transcriber.py:38 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:35 -msgid "English" -msgstr "Engels" - #: buzz/transcriber/transcriber.py:39 msgid "Chinese" msgstr "Chinees" -#: buzz/transcriber/transcriber.py:40 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 -msgid "German" -msgstr "Duits" - -#: buzz/transcriber/transcriber.py:41 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 -msgid "Spanish" -msgstr "Spaans" - #: buzz/transcriber/transcriber.py:42 msgid "Russian" msgstr "Russisch" @@ -117,11 +751,6 @@ msgstr "Koreaans" msgid "French" msgstr "Frans" -#: buzz/transcriber/transcriber.py:45 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 -msgid "Japanese" -msgstr "Japans" - #: buzz/transcriber/transcriber.py:46 msgid "Portuguese" msgstr "Portugees" @@ -130,20 +759,6 @@ msgstr "Portugees" msgid "Turkish" msgstr "Turks" -#: buzz/transcriber/transcriber.py:48 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 -msgid "Polish" -msgstr "Pools" - -#: buzz/transcriber/transcriber.py:49 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:36 -msgid "Catalan" -msgstr "Catalaans" - -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "Nederlands" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "Arabisch" @@ -152,11 +767,6 @@ msgstr "Arabisch" msgid "Swedish" msgstr "Zweeds" -#: buzz/transcriber/transcriber.py:53 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 -msgid "Italian" -msgstr "Italiaans" - #: buzz/transcriber/transcriber.py:54 msgid "Indonesian" msgstr "Indonesisch" @@ -177,11 +787,6 @@ msgstr "Vietnamees" msgid "Hebrew" msgstr "Hebreeuws" -#: buzz/transcriber/transcriber.py:59 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 -msgid "Ukrainian" -msgstr "Oekraïens" - #: buzz/transcriber/transcriber.py:60 msgid "Greek" msgstr "Grieks" @@ -198,11 +803,6 @@ msgstr "Tsjechisch" msgid "Romanian" msgstr "Roemeens" -#: buzz/transcriber/transcriber.py:64 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:37 -msgid "Danish" -msgstr "Deens" - #: buzz/transcriber/transcriber.py:65 msgid "Hungarian" msgstr "Hongaars" @@ -263,11 +863,6 @@ msgstr "Telugu" msgid "Persian" msgstr "Perzisch" -#: buzz/transcriber/transcriber.py:80 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 -msgid "Latvian" -msgstr "Lets" - #: buzz/transcriber/transcriber.py:81 msgid "Bengali" msgstr "Bengaals" @@ -496,563 +1091,45 @@ msgstr "Soedanees" msgid "Cantonese" msgstr "Kantonees" -#: buzz/transcriber/transcriber.py:160 -#: buzz/widgets/transcriber/languages_combo_box.py:35 -msgid "Detect Language" -msgstr "Taal herkennen" +#: buzz/model_loader.py:528 +msgid "A connection error occurred" +msgstr "Er is een verbindingsfout opgetreden" -#: buzz/widgets/about_dialog.py:38 buzz/widgets/menu_bar.py:44 -msgid "About" -msgstr "Over" +#: buzz/settings/shortcut.py:17 +msgid "Open Record Window" +msgstr "Opnamevenster openen" -#: buzz/widgets/about_dialog.py:73 -msgid "Version" -msgstr "Versie" +#: buzz/settings/shortcut.py:18 +msgid "Import File" +msgstr "Bestand importeren" -#: buzz/widgets/about_dialog.py:80 -msgid "Check for updates" -msgstr "Controleren op updates" +#: buzz/settings/shortcut.py:20 +msgid "Open Preferences Window" +msgstr "Instellingenvenster openen" -#: buzz/widgets/about_dialog.py:109 -msgid "You're up to date!" -msgstr "De software is actueel!" +#: buzz/settings/shortcut.py:22 +msgid "View Transcript Text" +msgstr "Transcriptie bekijken" -#: buzz/widgets/import_url_dialog.py:22 -msgid "https://example.com/audio.mp3" -msgstr "https://voorbeeld.nl/audio.mp3" +#: buzz/settings/shortcut.py:23 +msgid "View Transcript Translation" +msgstr "Getranscribeerde vertaling bekijken" -#: buzz/widgets/import_url_dialog.py:28 buzz/widgets/main_window.py:240 -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245 -#: buzz/widgets/preferences_dialog/preferences_dialog.py:69 -#: buzz/widgets/transcriber/advanced_settings_dialog.py:97 -msgid "Ok" -msgstr "Oké" +#: buzz/settings/shortcut.py:24 +msgid "View Transcript Timestamps" +msgstr "Getranscribeerde tijdstippen bekijken" -#: buzz/widgets/import_url_dialog.py:29 buzz/widgets/main_window.py:241 -#: buzz/widgets/model_download_progress_dialog.py:29 -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246 -#: buzz/widgets/preferences_dialog/preferences_dialog.py:70 -msgid "Cancel" -msgstr "Annuleren" +#: buzz/settings/recording_transcriber_mode.py:5 +msgid "Append below" +msgstr "Onderaan toevoegen" -#: buzz/widgets/import_url_dialog.py:34 -msgid "URL:" -msgstr "Url:" +#: buzz/settings/recording_transcriber_mode.py:6 +msgid "Append above" +msgstr "Bovenaan toevoegen" -#: buzz/widgets/import_url_dialog.py:44 -msgid "Invalid URL" -msgstr "Ongeldige url" +#: buzz/settings/recording_transcriber_mode.py:7 +msgid "Append and correct" +msgstr "Toevoegen en corrigeren" -#: buzz/widgets/import_url_dialog.py:44 -msgid "The URL you entered is invalid." -msgstr "De ingevoerde url is ongeldig." - -#: buzz/widgets/main_window.py:233 -msgid "" -"Are you sure you want to delete the selected transcription(s)? This action " -"cannot be undone." -msgstr "" -"Weet u zeker dat u de gekozen transcriptie(s) wilt verwijderen? Deze actie " -"is onomkeerbaar." - -#: buzz/widgets/main_window.py:261 -msgid "Select audio file" -msgstr "Kies een audiobestand" - -#: buzz/widgets/main_window.py:297 -msgid "Unable to save OpenAI API key to keyring" -msgstr "De OpenAI-api-sleutel kan niet worden bewaard in de sleutelbos" - -#: buzz/widgets/main_window_toolbar.py:37 buzz/widgets/record_button.py:10 -#: buzz/widgets/record_button.py:17 -msgid "Record" -msgstr "Opnemen" - -#: buzz/widgets/main_window_toolbar.py:43 -msgid "New File Transcription" -msgstr "Nieuwe bestandstranscriptie" - -#: buzz/widgets/main_window_toolbar.py:50 -msgid "New URL Transcription" -msgstr "Nieuwe url-transcriptie" - -#: buzz/widgets/main_window_toolbar.py:57 -msgid "Open Transcript" -msgstr "Transcriptie openen" - -#: buzz/widgets/menu_bar.py:38 -msgid "Import File..." -msgstr "Bestand importeren…" - -#: buzz/widgets/menu_bar.py:41 -msgid "Import URL..." -msgstr "Url importeren…" - -#: buzz/widgets/menu_bar.py:48 -msgid "Preferences..." -msgstr "Instellingen…" - -#: buzz/widgets/menu_bar.py:51 buzz/widgets/menu_bar.py:61 -msgid "Help" -msgstr "Hulp" - -#: buzz/widgets/menu_bar.py:57 -msgid "File" -msgstr "Bestand" - -#: buzz/widgets/model_download_progress_dialog.py:36 -msgid "Downloading model" -msgstr "Bezig met ophalen van model…" - -#: buzz/widgets/model_download_progress_dialog.py:37 -msgid "remaining" -msgstr "resterend" - -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:42 -msgid "Enable folder watch" -msgstr "Map bijhouden" - -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 -msgid "Browse" -msgstr "Bladeren" - -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:94 -msgid "Input folder" -msgstr "Invoermap" - -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:95 -msgid "Output folder" -msgstr "Uitvoermap" - -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:105 -msgid "Select Input Folder" -msgstr "Kies een invoermap" - -#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:114 -msgid "Select Output Folder" -msgstr "Kies een uitvoermap" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 -msgid "Chinese (Simplified)" -msgstr "Chinees (Vereenvoudigd)" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 -msgid "Chinese (Traditional)" -msgstr "Chinees (Traditioneel)" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 -msgid "Restart required!" -msgstr "Herstart vereist!" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 -msgid "Ui Language" -msgstr "Programmataal" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 -msgid "Font Size" -msgstr "Tekstgrootte" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 -msgid "Test" -msgstr "Uitproberen" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 -msgid "OpenAI API key" -msgstr "OpenAI-api-sleutel" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 -msgid "OpenAI base url" -msgstr "OpenAI-hoofd-url" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 -msgid "Default export file name" -msgstr "Standaardnaam van export" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 -msgid "Enable live recording transcription export" -msgstr "Transcripties van opnames onmiddelijk exporteren" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 -msgid "Export folder" -msgstr "Exportmap" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 -msgid "Live recording mode" -msgstr "Live-opnamemodus" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 -msgid "OpenAI API Key Test" -msgstr "OpenAI-api-sleuteltest" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 -msgid "" -"Your API key is valid. Buzz will use this key to perform Whisper API " -"transcriptions and AI translations." -msgstr "" -"De api-sleutel is geldig. Buzz zal deze sleutel gebruiken om transcripties " -"en AI-vertalingen op te vragen bij Whisper." - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 -msgid "Invalid API key" -msgstr "Ongeldige api-sleutel" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 -msgid "" -"API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " -"API key may cause errors." -msgstr "" -"De api ondersteunt alleen base64-tekens (A–Za–z0–9+/=_-). Andere tekens " -"kunnen problemen veroorzaken." - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 -msgid "Select Export Folder" -msgstr "Kies een exportmap" - -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 -msgid "" -"OpenAI API returned invalid response. Please check the API url or your key. " -"Transcription and translation may still work if the API does not support key " -"validation." -msgstr "" -"De api gaf een ongeldig antwoord terug. Controleer de url of sleutel. " -"Transcriptie en vertaling werkt mogelijk nog steeds als de api niet om " -"sleutelverificatie vraagt." - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:70 -msgid "Group" -msgstr "Groep" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:82 -msgid "Huggingface ID of a Faster whisper model" -msgstr "Huggingface-id of een sneller Whisper-model" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94 -msgid "Download" -msgstr "Downloaden" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99 -msgid "Show file location" -msgstr "Bestandslocatie tonen" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107 -msgid "Delete" -msgstr "Verwijderen" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138 -msgid "Downloaded" -msgstr "Gedownload" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143 -msgid "Available for Download" -msgstr "Beschikbaar" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164 -msgid "Download link to Whisper.cpp ggml model file" -msgstr "Downloadlink van Whisper.cpp ggml-modelbestand" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239 -msgid "Delete Model" -msgstr "Model verwijderen" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240 -msgid "Are you sure you want to delete the selected model?" -msgstr "Weet u zeker dat u het gekozen model wilt verwijderen?" - -#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268 -msgid "Download failed" -msgstr "Het downloaden is mislukt" - -#: buzz/widgets/preferences_dialog/preferences_dialog.py:43 -msgid "Preferences" -msgstr "Instellingen" - -#: buzz/widgets/preferences_dialog/preferences_dialog.py:50 -msgid "General" -msgstr "Algemeen" - -#: buzz/widgets/preferences_dialog/preferences_dialog.py:53 -msgid "Models" -msgstr "Modellen" - -#: buzz/widgets/preferences_dialog/preferences_dialog.py:57 -msgid "Shortcuts" -msgstr "Sneltoetsen" - -#: buzz/widgets/preferences_dialog/preferences_dialog.py:63 -msgid "Folder Watch" -msgstr "Map bijhouden" - -#: buzz/widgets/preferences_dialog/shortcuts_editor_preferences_widget.py:29 -msgid "Reset to Defaults" -msgstr "Standaardwaarden" - -#: buzz/widgets/record_button.py:21 -msgid "Stop" -msgstr "Stoppen" - -#: buzz/widgets/recording_transcriber_widget.py:79 -msgid "Live Recording" -msgstr "Live-opname" - -#: buzz/widgets/recording_transcriber_widget.py:144 -msgid "Click Record to begin..." -msgstr "Klik op de opnameknop om te beginnen…" - -#: buzz/widgets/recording_transcriber_widget.py:147 -msgid "Waiting for AI translation..." -msgstr "Bezig met wachten op AI-vertaling…" - -#: buzz/widgets/recording_transcriber_widget.py:159 -msgid "Microphone:" -msgstr "Microfoon:" - -#: buzz/widgets/recording_transcriber_widget.py:526 -msgid "An error occurred while starting a new recording:" -msgstr "Er is een fout opgetreden tijdens het starten van de opname:" - -#: buzz/widgets/recording_transcriber_widget.py:530 -msgid "" -"Please check your audio devices or check the application logs for more " -"information." -msgstr "Controleer uw geluidsapparatuur of het programmalogboek." - -#: buzz/widgets/snap_notice.py:9 -msgid "Snap permission notice" -msgstr "Snap-rechten" - -#: buzz/widgets/snap_notice.py:13 -msgid "" -"Detected missing permissions, please check that snap permissions have been " -"granted" -msgstr "" -"Er ontbreken toegangsrechten - controleer of ze daadwerkelijk allemaal zijn " -"toegekend" - -#: buzz/widgets/snap_notice.py:16 -msgid "" -"To enable necessary permissions run the following commands in the terminal" -msgstr "" -"De rechten kunnen met behulp van deze terminalopdrachten worden verleend" - -#: buzz/widgets/snap_notice.py:27 -msgid "Close" -msgstr "Sluiten" - -#: buzz/widgets/transcriber/advanced_settings_button.py:9 -msgid "Advanced..." -msgstr "Geavanceerd…" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:33 -msgid "Advanced Settings" -msgstr "Geavanceerde instellingen" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:37 -msgid "Speech recognition settings" -msgstr "Spraakherkenningsinstellingen" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:46 -msgid "Comma-separated, e.g. \"0.0, 0.2, 0.4, 0.6, 0.8, 1.0\"" -msgstr "Kommagescheiden, bijv. ‘0.0, 0.2, 0.4, 0.6, 0.8, 1.0’" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:55 -msgid "Temperature:" -msgstr "Temperatuur:" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:66 -msgid "Initial Prompt:" -msgstr "Hoofdinvoer:" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:68 -msgid "Translation settings" -msgstr "Vertaalinstellingen" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:72 -msgid "Enable AI translation" -msgstr "AI-vertaling inschakelen" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:84 -msgid "AI model:" -msgstr "AI-model:" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:88 -msgid "Enter instructions for AI on how to translate..." -msgstr "Voer vertaalinstructies in…" - -#: buzz/widgets/transcriber/advanced_settings_dialog.py:92 -msgid "Instructions for AI:" -msgstr "AI-instructies:" - -#: buzz/widgets/transcriber/file_transcriber_widget.py:79 -msgid "Run" -msgstr "Uitvoeren" - -#: buzz/widgets/transcriber/file_transcription_form_widget.py:43 -msgid "Word-level timings" -msgstr "Woordherkenningstimings" - -#: buzz/widgets/transcriber/file_transcription_form_widget.py:54 -msgid "Extract speech" -msgstr "Spraak extraheren" - -#: buzz/widgets/transcriber/file_transcription_form_widget.py:77 -msgid "Export:" -msgstr "Exporteren:" - -#: buzz/widgets/transcriber/hugging_face_search_line_edit.py:37 -msgid "Huggingface ID of a model" -msgstr "Huggingface-id van een model" - -#: buzz/widgets/transcriber/initial_prompt_text_edit.py:10 -msgid "Enter prompt..." -msgstr "Voer een tekst in…" - -#: buzz/widgets/transcriber/transcription_options_group_box.py:92 -msgid "Model:" -msgstr "Model:" - -#: buzz/widgets/transcriber/transcription_options_group_box.py:104 -msgid "First time use of a model may take up to several minutest to load." -msgstr "" -"Let op: de eerste keer kan het enkele minuten duren voordat het model " -"geladen is." - -#: buzz/widgets/transcriber/transcription_options_group_box.py:114 -msgid "Api Key:" -msgstr "Api-sleutel:" - -#: buzz/widgets/transcriber/transcription_options_group_box.py:115 -msgid "Task:" -msgstr "Taak:" - -#: buzz/widgets/transcriber/transcription_options_group_box.py:116 -msgid "Language:" -msgstr "Taal:" - -#: buzz/widgets/transcription_tasks_table_widget.py:66 -msgid "In Progress" -msgstr "In behandeling" - -#: buzz/widgets/transcription_tasks_table_widget.py:69 -msgid "Completed" -msgstr "Afgerond" - -#: buzz/widgets/transcription_tasks_table_widget.py:76 -msgid "Failed" -msgstr "Mislukt" - -#: buzz/widgets/transcription_tasks_table_widget.py:79 -msgid "Canceled" -msgstr "Afgebroken" - -#: buzz/widgets/transcription_tasks_table_widget.py:81 -msgid "Queued" -msgstr "In wachtrij" - -#: buzz/widgets/transcription_tasks_table_widget.py:88 -msgid "File Name / URL" -msgstr "Bestandsnaam/Url" - -#: buzz/widgets/transcription_tasks_table_widget.py:100 -msgid "Model" -msgstr "Model" - -#: buzz/widgets/transcription_tasks_table_widget.py:109 -msgid "Task" -msgstr "Taak" - -#: buzz/widgets/transcription_tasks_table_widget.py:118 -msgid "Status" -msgstr "Status" - -#: buzz/widgets/transcription_tasks_table_widget.py:126 -msgid "Date Added" -msgstr "Toegevoegd op" - -#: buzz/widgets/transcription_tasks_table_widget.py:137 -msgid "Date Completed" -msgstr "Afgerond op" - -#: buzz/widgets/transcription_viewer/export_transcription_menu.py:30 -#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:95 -#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:34 -msgid "Text" -msgstr "Tekst" - -#: buzz/widgets/transcription_viewer/export_transcription_menu.py:31 -#: buzz/widgets/transcription_viewer/export_transcription_menu.py:64 -#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:96 -#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:40 -msgid "Translation" -msgstr "Vertaling" - -#: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 -msgid "Save File" -msgstr "Bestand opslaan" - -#: buzz/widgets/transcription_viewer/export_transcription_menu.py:80 -msgid "Text files" -msgstr "Tekstbestanden" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 -msgid "Resize Options" -msgstr "Grootteopties" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 -msgid "Desired subtitle length" -msgstr "Voorkeurslengte van ondertiteling" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -msgid "Resize" -msgstr "Grootte" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 -msgid "Merge Options" -msgstr "Samenvoegopties" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 -msgid "Merge by gap" -msgstr "Samenvoegen op basis van tussenruimte" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 -msgid "Split by punctuation" -msgstr "Splitsen op basis van leestekens" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 -msgid "Split by max length" -msgstr "Splitsen op basis van max. lengte" - -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 -msgid "Merge" -msgstr "Samenvoegen" - -#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:93 -msgid "Start" -msgstr "Begin" - -#: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py:94 -msgid "End" -msgstr "Einde" - -#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:26 -msgid "View" -msgstr "Bekijken" - -#: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py:46 -msgid "Timestamps" -msgstr "Tijdstippen" - -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 -msgid "Export" -msgstr "Exporteren" - -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 -msgid "API Key Required" -msgstr "Api-sleutel vereist" - -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 -msgid "Please enter OpenAI API Key in preferences" -msgstr "Voer de OpenAI-api-sleutel in in de instellingen" +#~ msgid "Version" +#~ msgstr "Versie" diff --git a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po index 6ccbc9e4..c010509d 100644 --- a/buzz/locale/pl_PL/LC_MESSAGES/buzz.po +++ b/buzz/locale/pl_PL/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2024-03-17 20:50+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -73,123 +73,128 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "Język:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "Nagrywanie na żywo" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 #, fuzzy msgid "Invalid API key" msgstr "Nieprawidłowy URL" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -533,56 +538,131 @@ msgstr "" msgid "Timestamps" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Otwórz transkrypt" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Zapisz plik" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 #, fuzzy msgid "Save File" @@ -691,10 +771,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po index abdc79a4..7630017f 100644 --- a/buzz/locale/uk_UA/LC_MESSAGES/buzz.po +++ b/buzz/locale/uk_UA/LC_MESSAGES/buzz.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: \n" "Last-Translator: Yevhen Popok \n" "Language-Team: \n" @@ -70,103 +70,108 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 #, fuzzy msgid "Ukrainian" msgstr "залишилось" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "Мова:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "Розмір шрифту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "Тест" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "API-ключ OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "Базова адреса OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "Типова назва файлу експорту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "Увімкнути експорт транскрипції з живого запису" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "Огляд" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "Тека для експорту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "Живий запис" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "Тест API-ключа OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." @@ -174,22 +179,22 @@ msgstr "" "Ваш API-ключ дійсний. Buzz використає цей ключ для транскрипції з Whisper " "API та перекладу ШІ." -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 #, fuzzy msgid "Invalid API key" msgstr "API-ключ OpenAI" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "Виберіть теку для експорту" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -522,56 +527,131 @@ msgstr "Вигляд" msgid "Timestamps" msgstr "Позначки часу" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "Експорт" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "Перекласти" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "Потрібен API-ключ" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "Будь ласка, введіть API-ключ OpenAI в налаштуваннях" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "Відкрити транскрипцію" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "Зберегти файл" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 msgid "Save File" msgstr "Зберегти файл" @@ -677,10 +757,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po index 943087a7..3fdd2b12 100644 --- a/buzz/locale/zh_CN/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_CN/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2023-05-01 15:45+0800\n" "Last-Translator: \n" "Language-Team: lamb \n" @@ -73,113 +73,118 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 #, fuzzy msgid "Ukrainian" msgstr "剩余" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "语言:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "字体大小" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "测试" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "OpenAI API key" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "OpenAI 基于 url" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "默认输出文件名" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "启用实时录制转录导出" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "浏览" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "导出文件夹" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "现场录制模式" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "测试OpenAI API Key" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "您的API密钥有效。Buzz将使用此密钥执行 Whisper API 识别和 AI 翻译。" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "无效的API key" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 #, fuzzy msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " @@ -187,11 +192,11 @@ msgid "" msgstr "" "API只支持 base64字符(A-Za-z0-9+/=)。其他字符在API密钥中可能导致错误。" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "选择输出文件夹" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -534,57 +539,132 @@ msgstr "查看" msgid "Timestamps" msgstr "时间戳" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "导出" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "翻译" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "调整大小" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "需要API Key" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "请在偏好设置中输入OpenAI API Key" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 #, fuzzy msgid "Resize Options" msgstr "调整大小" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "所需字幕长度" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "合并选项" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "按间隔合并" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "按标点符号拆分" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "按最大长度拆分" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "合并" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "打开识别结果" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "保存文件" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 #, fuzzy msgid "Save File" @@ -691,10 +771,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po index 66458e11..2ce93747 100644 --- a/buzz/locale/zh_TW/LC_MESSAGES/buzz.po +++ b/buzz/locale/zh_TW/LC_MESSAGES/buzz.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 19:12+0200\n" +"POT-Creation-Date: 2025-04-06 20:58+0300\n" "PO-Revision-Date: 2023-05-01 15:45+0800\n" "Last-Translator: \n" "Language-Team: Lamb\n" @@ -73,122 +73,127 @@ msgid "Danish" msgstr "" #: buzz/widgets/preferences_dialog/general_preferences_widget.py:38 +#: buzz/transcriber/transcriber.py:50 +msgid "Dutch" +msgstr "" + +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 #: buzz/transcriber/transcriber.py:40 msgid "German" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:39 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 #: buzz/transcriber/transcriber.py:41 msgid "Spanish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:40 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 #: buzz/transcriber/transcriber.py:53 msgid "Italian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:41 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 #: buzz/transcriber/transcriber.py:45 msgid "Japanese" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:42 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 #: buzz/transcriber/transcriber.py:80 msgid "Latvian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:43 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 #: buzz/transcriber/transcriber.py:48 msgid "Polish" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:44 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 #: buzz/transcriber/transcriber.py:59 msgid "Ukrainian" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:45 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 msgid "Chinese (Simplified)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:46 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:47 msgid "Chinese (Traditional)" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:84 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:85 msgid "Restart required!" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89 #, fuzzy msgid "Ui Language" msgstr "語言:" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:96 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:97 msgid "Font Size" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:105 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:106 msgid "Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:111 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:112 msgid "OpenAI API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:124 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:125 msgid "OpenAI base url" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:133 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:134 msgid "Default export file name" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:139 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:140 msgid "Enable live recording transcription export" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:145 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:146 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47 #: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50 msgid "Browse" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:164 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:165 msgid "Export folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:175 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:176 #, fuzzy msgid "Live recording mode" msgstr "現場錄製" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:200 -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:206 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:207 msgid "OpenAI API Key Test" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:201 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:202 msgid "" "Your API key is valid. Buzz will use this key to perform Whisper API " "transcriptions and AI translations." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:217 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 msgid "Invalid API key" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:218 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:219 msgid "" "API supports only base64 characters (A-Za-z0-9+/=_-). Other characters in " "API key may cause errors." msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:236 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:237 msgid "Select Export Folder" msgstr "" -#: buzz/widgets/preferences_dialog/general_preferences_widget.py:296 +#: buzz/widgets/preferences_dialog/general_preferences_widget.py:297 msgid "" "OpenAI API returned invalid response. Please check the API url or your key. " "Transcription and translation may still work if the API does not support key " @@ -529,56 +534,131 @@ msgstr "" msgid "Timestamps" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:146 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:150 msgid "Export" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:160 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:164 #: buzz/transcriber/transcriber.py:24 msgid "Translate" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:170 -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:168 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:174 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:166 msgid "Resize" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:269 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:187 +msgid "Identify Speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:286 msgid "API Key Required" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:270 +#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:287 msgid "Please enter OpenAI API Key in preferences" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:150 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:148 msgid "Resize Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:161 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:159 msgid "Desired subtitle length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:186 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:184 msgid "Merge Options" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:197 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:195 msgid "Merge by gap" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:205 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:203 msgid "Split by punctuation" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:213 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:211 msgid "Split by max length" msgstr "" -#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:225 +#: buzz/widgets/transcription_viewer/transcription_resizer_widget.py:223 msgid "Merge" msgstr "" +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:101 +msgid "1/9 Collecting transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:115 +msgid "2/9 Loading audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:124 +msgid "3/9 Loading alignment model" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:130 +msgid "4/9 Preparing audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:142 +#, fuzzy +msgid "5/9 Preparing transcripts" +msgstr "打開轉換結果" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:160 +msgid "6/9 Converting audio" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:174 +msgid "7/9 Identifying speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:184 +msgid "8/9 Mapping speakers to transcripts" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:233 +msgid "9/9 Identification done" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:278 +msgid "Step 1: Identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:290 +msgid "Identify" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:300 +msgid "Ready to identify speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:302 +msgid "Audio file not found" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:318 +msgid "Step 2: Name speakers" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:333 +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:431 +msgid "Play sample" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:348 +msgid "Merge speaker sentences" +msgstr "" + +#: buzz/widgets/transcription_viewer/speaker_identification_widget.py:353 +#, fuzzy +msgid "Save" +msgstr "檔案" + #: buzz/widgets/transcription_viewer/export_transcription_menu.py:78 #, fuzzy msgid "Save File" @@ -685,10 +765,6 @@ msgstr "" msgid "Turkish" msgstr "" -#: buzz/transcriber/transcriber.py:50 -msgid "Dutch" -msgstr "" - #: buzz/transcriber/transcriber.py:51 msgid "Arabic" msgstr "" diff --git a/buzz/widgets/transcription_viewer/speaker_identification_widget.py b/buzz/widgets/transcription_viewer/speaker_identification_widget.py index 309d3324..d7be07f3 100644 --- a/buzz/widgets/transcription_viewer/speaker_identification_widget.py +++ b/buzz/widgets/transcription_viewer/speaker_identification_widget.py @@ -1,11 +1,14 @@ import re import os import logging -import stable_whisper -import srt -from pathlib import Path +import faster_whisper +import torch +import torchaudio +import random from typing import Optional -from PyQt6.QtCore import Qt, QThread, QObject, pyqtSignal +from platformdirs import user_cache_dir +from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutput +from PyQt6.QtCore import Qt, QThread, QObject, pyqtSignal, QUrl, QTimer from PyQt6.QtGui import QFont from PyQt6.QtWidgets import ( QWidget, @@ -13,14 +16,15 @@ from PyQt6.QtWidgets import ( QVBoxLayout, QHBoxLayout, QLabel, - QSpinBox, + QProgressBar, QPushButton, QCheckBox, QGroupBox, QSpacerItem, QSizePolicy, + QLayout, ) -from buzz.locale import _, languages +from buzz.locale import _ from buzz.db.entity.transcription import Transcription from buzz.db.service.transcription_service import TranscriptionService from buzz.paths import file_path_as_title @@ -31,19 +35,38 @@ from buzz.widgets.preferences_dialog.models.file_transcription_preferences impor FileTranscriptionPreferences, ) +from ctc_forced_aligner import ( + generate_emissions, + get_alignments, + get_spans, + load_alignment_model, + postprocess_results, + preprocess_text, +) +from whisper_diarization.helpers import ( + cleanup, + create_config, + get_realigned_ws_mapping_with_punctuation, + get_sentences_speaker_mapping, + get_words_speaker_mapping, + langs_to_iso, + punct_model_langs, +) +from deepmultilingualpunctuation import PunctuationModel +from nemo.collections.asr.models.msdd_models import NeuralDiarizer + SENTENCE_END = re.compile(r'.*[.!?。!?]') -class TranscriptionWorker(QObject): - finished = pyqtSignal() - result_ready = pyqtSignal(list) +class IdentificationWorker(QObject): + finished = pyqtSignal(list) + progress_update = pyqtSignal(str) - def __init__(self, transcription, transcription_options, transcription_service, regroup_string: str): + def __init__(self, transcription, transcription_options, transcription_service): super().__init__() self.transcription = transcription self.transcription_options = transcription_options self.transcription_service = transcription_service - self.regroup_string = regroup_string def get_transcript(self, audio, **kwargs) -> dict: buzz_segments = self.transcription_service.get_transcription_segments( @@ -75,36 +98,139 @@ class TranscriptionWorker(QObject): } def run(self): - transcription_file = self.transcription.file - transcription_file_exists = os.path.exists(transcription_file) + self.progress_update.emit(_("1/9 Collecting transcripts")) - transcription_file_path = Path(transcription_file) - speech_path = transcription_file_path.with_name(f"{transcription_file_path.stem}_speech.mp3") - if self.transcription_options.extract_speech and os.path.exists(speech_path): - transcription_file = str(speech_path) - transcription_file_exists = True + # Step 1 - Get transcript + # TODO - Add detected language to the transcript, detect and store separately in metadata + # Will also be relevant for template parsing of transcript file names + # - See diarize.py for example on how to get this info from whisper transcript, maybe other whisper models also have it + language = self.transcription.language if self.transcription.language else "en" - result = stable_whisper.transcribe_any( - self.get_transcript, - transcription_file, - vad=transcription_file_exists, - suppress_silence=transcription_file_exists, - regroup=self.regroup_string, - check_sorted=False, + segments = self.transcription_service.get_transcription_segments( + transcription_id=self.transcription.id_as_uuid ) - segments = [] - for segment in result.segments: - segments.append( - Segment( - start=int(segment.start * 100), - end=int(segment.end * 100), - text=segment.text - ) + full_transcript = "".join(segment.text for segment in segments) + + self.progress_update.emit(_("2/9 Loading audio")) + audio_waveform = faster_whisper.decode_audio(self.transcription.file) + + # Step 2 - Forced alignment + force_cpu = os.getenv("BUZZ_FORCE_CPU", "false") + use_cuda = torch.cuda.is_available() and force_cpu == "false" + device = "cuda" if use_cuda else "cpu" + torch_dtype = torch.float16 if use_cuda else torch.float32 + + self.progress_update.emit(_("3/9 Loading alignment model")) + alignment_model, alignment_tokenizer = load_alignment_model( + device, + dtype=torch_dtype, + ) + + self.progress_update.emit(_("4/9 Preparing audio")) + emissions, stride = generate_emissions( + alignment_model, + torch.from_numpy(audio_waveform) + .to(alignment_model.dtype) + .to(alignment_model.device), + batch_size=8, + ) + + del alignment_model + torch.cuda.empty_cache() + + self.progress_update.emit(_("5/9 Preparing transcripts")) + tokens_starred, text_starred = preprocess_text( + full_transcript, + romanize=True, + language=langs_to_iso[language], + ) + + segments, scores, blank_token = get_alignments( + emissions, + tokens_starred, + alignment_tokenizer, + ) + + spans = get_spans(tokens_starred, segments, blank_token) + + word_timestamps = postprocess_results(text_starred, spans, stride, scores) + + # convert audio to mono for NeMo compatibility + self.progress_update.emit(_("6/9 Converting audio")) + model_root_dir = user_cache_dir("Buzz") + model_root_dir = os.getenv("BUZZ_MODEL_ROOT", model_root_dir) + temp_path = os.path.join(model_root_dir, "speaker_identification_temp") + os.makedirs(temp_path, exist_ok=True) + torchaudio.save( + os.path.join(temp_path, "mono_file.wav"), + torch.from_numpy(audio_waveform).unsqueeze(0).float(), + 16000, + channels_first=True, + ) + + # Step 3 - Diarization + self.progress_update.emit(_("7/9 Identifying speakers")) + logging.basicConfig(level=logging.INFO) + logging.getLogger("nemo_logger").setLevel(logging.ERROR) + msdd_model = NeuralDiarizer(cfg=create_config(temp_path)).to(device) + msdd_model.diarize() + + del msdd_model + torch.cuda.empty_cache() + + # Step 4 - Reading timestamps <> Speaker Labels mapping + self.progress_update.emit(_("8/9 Mapping speakers to transcripts")) + speaker_ts = [] + with open(os.path.join(temp_path, "pred_rttms", "mono_file.rttm"), "r") as f: + lines = f.readlines() + for line in lines: + line_list = line.split(" ") + s = int(float(line_list[5]) * 1000) + e = s + int(float(line_list[8]) * 1000) + speaker_ts.append([s, e, int(line_list[11].split("_")[-1])]) + + wsm = get_words_speaker_mapping(word_timestamps, speaker_ts, "start") + + if language in punct_model_langs: + # restoring punctuation in the transcript to help realign the sentences + punct_model = PunctuationModel(model="kredor/punctuate-all") + + words_list = list(map(lambda x: x["word"], wsm)) + + labled_words = punct_model.predict(words_list, chunk_size=230) + + ending_puncts = ".?!。!?" + model_puncts = ".,;:!?。!?" + + # We don't want to punctuate U.S.A. with a period. Right? + is_acronym = lambda x: re.fullmatch(r"\b(?:[a-zA-Z]\.){2,}", x) + + for word_dict, labeled_tuple in zip(wsm, labled_words): + word = word_dict["word"] + if ( + word + and labeled_tuple[1] in ending_puncts + and (word[-1] not in model_puncts or is_acronym(word)) + ): + word += labeled_tuple[1] + if word.endswith(".."): + word = word.rstrip(".") + word_dict["word"] = word + + else: + logging.warning( + f"Punctuation restoration is not available for {language} language." + " Using the original punctuation." ) - self.result_ready.emit(segments) - self.finished.emit() + wsm = get_realigned_ws_mapping_with_punctuation(wsm) + ssm = get_sentences_speaker_mapping(wsm, speaker_ts) + + cleanup(temp_path) + + self.progress_update.emit(_("9/9 Identification done")) + self.finished.emit(ssm) class SpeakerIdentificationWidget(QWidget): @@ -125,12 +251,13 @@ class SpeakerIdentificationWidget(QWidget): self.transcription_service = transcription_service self.transcriptions_updated_signal = transcriptions_updated_signal - self.new_transcript_id = None + self.identification_result = None + self.thread = None self.worker = None - self.setMinimumWidth(600) - self.setMinimumHeight(300) + self.setMinimumWidth(650) + self.setMinimumHeight(400) self.setWindowTitle(file_path_as_title(transcription.file)) @@ -144,182 +271,262 @@ class SpeakerIdentificationWidget(QWidget): ) layout = QFormLayout(self) + layout.setSizeConstraint(QLayout.SizeConstraint.SetMinAndMaxSize) - # Resize longer subtitles - resize_label = QLabel(_("Resize Options"), self) - font = resize_label.font() + # Step 1: Identify speakers + step_1_label = QLabel(_("Step 1: Identify speakers"), self) + font = step_1_label.font() font.setWeight(QFont.Weight.Bold) - resize_label.setFont(font) - layout.addRow(resize_label) + step_1_label.setFont(font) + layout.addRow(step_1_label) - resize_group_box = QGroupBox(self) - resize_layout = QVBoxLayout(resize_group_box) + step_1_group_box = QGroupBox(self) + step_1_group_box.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + step_1_layout = QVBoxLayout(step_1_group_box) - self.resize_row = QHBoxLayout() + self.step_1_row = QHBoxLayout() - self.desired_subtitle_length_label = QLabel(_("Desired subtitle length"), self) + self.step_1_button = QPushButton(_("Identify")) + self.step_1_button.setMinimumWidth(200) + self.step_1_button.clicked.connect(self.on_identify_button_clicked) - self.target_chars_spin_box = QSpinBox(self) - self.target_chars_spin_box.setMinimum(1) - self.target_chars_spin_box.setMaximum(100) - self.target_chars_spin_box.setValue(42) + self.progress_bar = QProgressBar(self) + self.progress_bar.setMinimumWidth(400) + self.progress_bar.setRange(0, 9) + self.progress_bar.setValue(0) - self.resize_button = QPushButton(_("Resize")) - self.resize_button.clicked.connect(self.on_resize_button_clicked) + if os.path.isfile(self.transcription.file): + self.progress_bar.setFormat(_("Ready to identify speakers")) + else: + self.progress_bar.setFormat(_("Audio file not found")) + self.step_1_button.setEnabled(False) - self.resize_row.addWidget(self.desired_subtitle_length_label) - self.resize_row.addWidget(self.target_chars_spin_box) - self.resize_row.addWidget(self.resize_button) + self.step_1_row.addWidget(self.progress_bar) - resize_layout.addLayout(self.resize_row) + self.step_1_row.addWidget(self.step_1_button) - resize_group_box.setEnabled(self.transcription.word_level_timings != 1) + step_1_layout.addLayout(self.step_1_row) - layout.addRow(resize_group_box) + layout.addRow(step_1_group_box) # Spacer spacer = QSpacerItem(0, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) layout.addItem(spacer) - # Merge words into subtitles - merge_options_label = QLabel(_("Merge Options"), self) - font = merge_options_label.font() + # Step 2: Name speakers + step_2_label = QLabel(_("Step 2: Name speakers"), self) + font = step_2_label.font() font.setWeight(QFont.Weight.Bold) - merge_options_label.setFont(font) - layout.addRow(merge_options_label) + step_2_label.setFont(font) + layout.addRow(step_2_label) - merge_options_group_box = QGroupBox(self) - merge_options_layout = QVBoxLayout(merge_options_group_box) + self.step_2_group_box = QGroupBox(self) + self.step_2_group_box.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + self.step_2_group_box.setEnabled(False) + step_2_layout = QVBoxLayout(self.step_2_group_box) - self.merge_options_row = QVBoxLayout() + self.speaker_preview_row = QVBoxLayout() - self.merge_by_gap = QCheckBox(_("Merge by gap")) - self.merge_by_gap.setChecked(True) - self.merge_by_gap.setMinimumWidth(250) - self.merge_by_gap_input = LineEdit("0.2", self) - merge_by_gap_layout = QHBoxLayout() - merge_by_gap_layout.addWidget(self.merge_by_gap) - merge_by_gap_layout.addWidget(self.merge_by_gap_input) + self.speaker_0_input = LineEdit("Speaker 0", self) - self.split_by_punctuation = QCheckBox(_("Split by punctuation")) - self.split_by_punctuation.setChecked(True) - self.split_by_punctuation.setMinimumWidth(250) - self.split_by_punctuation_input = LineEdit(".* /./. /。/?/? /?/!/! /!/,/, ", self) - split_by_punctuation_layout = QHBoxLayout() - split_by_punctuation_layout.addWidget(self.split_by_punctuation) - split_by_punctuation_layout.addWidget(self.split_by_punctuation_input) + self.speaker_0_preview_button = QPushButton(_("Play sample")) + self.speaker_0_preview_button.setMinimumWidth(200) + self.speaker_0_preview_button.clicked.connect(lambda: self.on_speaker_preview("Speaker 0")) - self.split_by_max_length = QCheckBox(_("Split by max length")) - self.split_by_max_length.setChecked(True) - self.split_by_max_length.setMinimumWidth(250) - self.split_by_max_length_input = LineEdit("42", self) - split_by_max_length_layout = QHBoxLayout() - split_by_max_length_layout.addWidget(self.split_by_max_length) - split_by_max_length_layout.addWidget(self.split_by_max_length_input) + speaker_0_layout = QHBoxLayout() + speaker_0_layout.addWidget(self.speaker_0_input) + speaker_0_layout.addWidget(self.speaker_0_preview_button) - self.merge_options_row.addLayout(merge_by_gap_layout) - self.merge_options_row.addLayout(split_by_punctuation_layout) - self.merge_options_row.addLayout(split_by_max_length_layout) + self.speaker_preview_row.addLayout(speaker_0_layout) - self.merge_button = QPushButton(_("Merge")) - self.merge_button.clicked.connect(self.on_merge_button_clicked) + step_2_layout.addLayout(self.speaker_preview_row) - self.merge_options_row.addWidget(self.merge_button) + layout.addRow(self.step_2_group_box) - merge_options_layout.addLayout(self.merge_options_row) + # Save button + self.merge_speaker_sentences = QCheckBox(_("Merge speaker sentences")) + self.merge_speaker_sentences.setChecked(True) + self.merge_speaker_sentences.setEnabled(False) + self.merge_speaker_sentences.setMinimumWidth(250) - merge_options_group_box.setEnabled(self.transcription.word_level_timings == 1) + self.save_button = QPushButton(_("Save")) + self.save_button.setEnabled(False) + self.save_button.clicked.connect(self.on_save_button_clicked) - layout.addRow(merge_options_group_box) + layout.addRow(self.merge_speaker_sentences) + layout.addRow(self.save_button) self.setLayout(layout) + # Invisible preview player + url = QUrl.fromLocalFile(self.transcription.file) + self.player = QMediaPlayer() + self.audio_output = QAudioOutput() + self.player.setAudioOutput(self.audio_output) + self.player.setSource(url) + self.player_timer = None + def load_preferences(self): self.settings.settings.beginGroup("file_transcriber") preferences = FileTranscriptionPreferences.load(settings=self.settings.settings) self.settings.settings.endGroup() return preferences - # TODO rename function - def on_resize_button_clicked(self): - # Step 1 - Get the segments - segments = self.transcription_service.get_transcription_segments( - transcription_id=self.transcription.id_as_uuid - ) - - subs = [] - for segment in segments: - subtitle = srt.Subtitle( - index=segment.id, - start=segment.start_time, - end=segment.end_time, - content=segment.text - ) - subs.append(subtitle) - - # Step 2 - ... - logging.debug(f"=== Will identify speakers ===") - - def on_merge_button_clicked(self): - self.new_transcript_id = self.transcription_service.copy_transcription( - self.transcription.id_as_uuid - ) - self.transcription_service.update_transcription_progress(self.new_transcript_id, 0.0) - - if self.transcriptions_updated_signal: - self.transcriptions_updated_signal.emit(self.new_transcript_id) - - regroup_string = '' - if self.merge_by_gap.isChecked(): - regroup_string += f'mg={self.merge_by_gap_input.text()}' - - if self.split_by_max_length.isChecked(): - regroup_string += f'++{self.split_by_max_length_input.text()}+1' - - if self.split_by_punctuation.isChecked(): - if regroup_string: - regroup_string += '_' - regroup_string += f'sp={self.split_by_punctuation_input.text()}' - - if self.split_by_max_length.isChecked(): - if regroup_string: - regroup_string += '_' - regroup_string += f'sl={self.split_by_max_length_input.text()}' - - if self.merge_by_gap.isChecked(): - if regroup_string: - regroup_string += '_' - regroup_string += f'mg={self.merge_by_gap_input.text()}' - - if self.split_by_max_length.isChecked(): - regroup_string += f'++{self.split_by_max_length_input.text()}+1' - - regroup_string = os.getenv("BUZZ_MERGE_REGROUP_RULE", regroup_string) - - self.hide() - + def on_identify_button_clicked(self): self.thread = QThread() - self.worker = TranscriptionWorker( + self.worker = IdentificationWorker( self.transcription, self.transcription_options, - self.transcription_service, - regroup_string + self.transcription_service ) self.worker.moveToThread(self.thread) self.thread.started.connect(self.worker.run) self.worker.finished.connect(self.thread.quit) self.worker.finished.connect(self.worker.deleteLater) self.thread.finished.connect(self.thread.deleteLater) - self.worker.result_ready.connect(self.on_transcription_completed) + self.worker.finished.connect(self.on_identification_finished) + self.worker.progress_update.connect(self.on_progress_update) self.thread.start() - def on_transcription_completed(self, segments): - if self.new_transcript_id is not None: - self.transcription_service.update_transcription_as_completed(self.new_transcript_id, segments) + def on_progress_update(self, progress): + self.progress_bar.setFormat(progress) - if self.transcriptions_updated_signal: - self.transcriptions_updated_signal.emit(self.new_transcript_id) + progress_value = 0 + if progress and progress[0].isdigit(): + progress_value = int(progress[0]) + self.progress_bar.setValue(progress_value) + else: + logging.error(f"Invalid progress format: {progress}") + + if progress_value == 9: + self.step_2_group_box.setEnabled(True) + self.merge_speaker_sentences.setEnabled(True) + self.save_button.setEnabled(True) + + def on_identification_finished(self, result): + self.identification_result = result + + unique_speakers = {entry['speaker'] for entry in result} + + while self.speaker_preview_row.count(): + item = self.speaker_preview_row.takeAt(0) + widget = item.widget() + if widget: + widget.deleteLater() + else: + layout = item.layout() + if layout: + while layout.count(): + sub_item = layout.takeAt(0) + sub_widget = sub_item.widget() + if sub_widget: + sub_widget.deleteLater() + + for speaker in sorted(unique_speakers): + speaker_input = LineEdit(speaker, self) + speaker_input.setMinimumWidth(200) + + speaker_preview_button = QPushButton(_("Play sample")) + speaker_preview_button.setMinimumWidth(200) + speaker_preview_button.clicked.connect(lambda checked, s=speaker: self.on_speaker_preview(s)) + + speaker_layout = QHBoxLayout() + speaker_layout.addWidget(speaker_input) + speaker_layout.addWidget(speaker_preview_button) + + self.speaker_preview_row.addLayout(speaker_layout) + + def on_speaker_preview(self, speaker_id): + if self.player_timer: + self.player_timer.stop() + + speaker_records = [record for record in self.identification_result if record['speaker'] == speaker_id] + + if speaker_records: + random_record = random.choice(speaker_records) + + start_time = random_record['start_time'] + end_time = random_record['end_time'] + + self.player.setPosition(int(start_time)) + self.player.play() + + self.player_timer = QTimer(self) + self.player_timer.setSingleShot(True) + self.player_timer.timeout.connect(self.player.stop) + self.player_timer.start(min(end_time, 10 * 1000)) # 10 seconds + + def on_save_button_clicked(self): + speaker_names = [] + for i in range(self.speaker_preview_row.count()): + item = self.speaker_preview_row.itemAt(i) + if item.layout(): + for j in range(item.layout().count()): + sub_item = item.layout().itemAt(j) + widget = sub_item.widget() + if isinstance(widget, LineEdit): + speaker_names.append(widget.text()) + + unique_speakers = {entry['speaker'] for entry in self.identification_result} + original_speakers = sorted(unique_speakers) + speaker_mapping = dict(zip(original_speakers, speaker_names)) + + segments = [] + if self.merge_speaker_sentences.isChecked(): + previous_segment = None + + for entry in self.identification_result: + speaker_name = speaker_mapping.get(entry['speaker'], entry['speaker']) + + if previous_segment and previous_segment['speaker'] == speaker_name: + previous_segment['end_time'] = entry['end_time'] + previous_segment['text'] += " " + entry['text'] + else: + if previous_segment: + segment = Segment( + start=previous_segment['start_time'], + end=previous_segment['end_time'], + text=f"{previous_segment['speaker']}: {previous_segment['text']}" + ) + segments.append(segment) + previous_segment = { + 'start_time': entry['start_time'], + 'end_time': entry['end_time'], + 'speaker': speaker_name, + 'text': entry['text'] + } + + if previous_segment: + segment = Segment( + start=previous_segment['start_time'], + end=previous_segment['end_time'], + text=f"{previous_segment['speaker']}: {previous_segment['text']}" + ) + segments.append(segment) + else: + for entry in self.identification_result: + speaker_name = speaker_mapping.get(entry['speaker'], entry['speaker']) + segment = Segment( + start=entry['start_time'], + end=entry['end_time'], + text=f"{speaker_name}: {entry['text']}" + ) + segments.append(segment) + + new_transcript_id = self.transcription_service.copy_transcription( + self.transcription.id_as_uuid + ) + + self.transcription_service.update_transcription_as_completed(new_transcript_id, segments) + + if self.transcriptions_updated_signal: + self.transcriptions_updated_signal.emit(new_transcript_id) + + self.player.stop() + + if self.player_timer: + self.player_timer.stop() self.close() diff --git a/buzz/widgets/transcription_viewer/transcription_resizer_widget.py b/buzz/widgets/transcription_viewer/transcription_resizer_widget.py index 5a3f24ad..a4506d86 100644 --- a/buzz/widgets/transcription_viewer/transcription_resizer_widget.py +++ b/buzz/widgets/transcription_viewer/transcription_resizer_widget.py @@ -36,8 +36,7 @@ from buzz.widgets.preferences_dialog.models.file_transcription_preferences impor SENTENCE_END = re.compile(r'.*[.!?。!?]') class TranscriptionWorker(QObject): - finished = pyqtSignal() - result_ready = pyqtSignal(list) + finished = pyqtSignal(list) def __init__(self, transcription, transcription_options, transcription_service, regroup_string: str): super().__init__() @@ -104,8 +103,7 @@ class TranscriptionWorker(QObject): ) ) - self.result_ready.emit(segments) - self.finished.emit() + self.finished.emit(segments) class TranscriptionResizerWidget(QWidget): @@ -335,7 +333,7 @@ class TranscriptionResizerWidget(QWidget): self.worker.finished.connect(self.thread.quit) self.worker.finished.connect(self.worker.deleteLater) self.thread.finished.connect(self.thread.deleteLater) - self.worker.result_ready.connect(self.on_transcription_completed) + self.worker.finished.connect(self.on_transcription_completed) self.thread.start() diff --git a/buzz/widgets/transcription_viewer/transcription_viewer_widget.py b/buzz/widgets/transcription_viewer/transcription_viewer_widget.py index 3dce4347..84712621 100644 --- a/buzz/widgets/transcription_viewer/transcription_viewer_widget.py +++ b/buzz/widgets/transcription_viewer/transcription_viewer_widget.py @@ -1,4 +1,5 @@ import logging +import platform from typing import Optional from uuid import UUID @@ -194,16 +195,18 @@ class TranscriptionViewerWidget(QWidget): toolbar.addWidget(resize_button) - speaker_identification_button = QToolButton() - speaker_identification_button.setText(_("Identify Speakers")) - speaker_identification_button.setObjectName("speaker_identification_button") - speaker_identification_button.setIcon(SpeakerIdentificationIcon(self)) - speaker_identification_button.setToolButtonStyle( - Qt.ToolButtonStyle.ToolButtonTextBesideIcon - ) - speaker_identification_button.clicked.connect(self.on_speaker_identification_button_clicked) + # Underlying libs do not support intel Macs + if not (platform.system() == "Darwin" and platform.machine() == "x86_64"): + speaker_identification_button = QToolButton() + speaker_identification_button.setText(_("Identify Speakers")) + speaker_identification_button.setObjectName("speaker_identification_button") + speaker_identification_button.setIcon(SpeakerIdentificationIcon(self)) + speaker_identification_button.setToolButtonStyle( + Qt.ToolButtonStyle.ToolButtonTextBesideIcon + ) + speaker_identification_button.clicked.connect(self.on_speaker_identification_button_clicked) - toolbar.addWidget(speaker_identification_button) + toolbar.addWidget(speaker_identification_button) layout.setMenuBar(toolbar) diff --git a/docs/docs/preferences.md b/docs/docs/preferences.md index 10cc3b1d..b88d9d75 100644 --- a/docs/docs/preferences.md +++ b/docs/docs/preferences.md @@ -88,7 +88,7 @@ combined to produce the final answer. **BUZZ_TRANSLATION_API_KEY** - Api key of OpenAI compatible API to use for translation. -**BUZZ_MODEL_ROOT** - Root directory to store model files. +**BUZZ_MODEL_ROOT** - Root directory to store model files. You may also want to set `HF_HOME` to the same folder as some libraries used in Buzz download their models independently. Defaults to [user_cache_dir](https://pypi.org/project/platformdirs/). **BUZZ_FAVORITE_LANGUAGES** - Coma separated list of supported language codes to show on top of language list. diff --git a/docs/docs/usage/1_file_import.md b/docs/docs/usage/1_file_import.md index bc8cc7e9..b24317d8 100644 --- a/docs/docs/usage/1_file_import.md +++ b/docs/docs/usage/1_file_import.md @@ -20,3 +20,5 @@ To import a file: (See the [Live Recording section](https://chidiwilliams.github.io/buzz/docs/usage/live_recording) for more information about the task, language, and quality settings.) [![Media File Import on Buzz](https://cdn.loom.com/sessions/thumbnails/cf263b099ac3481082bb56d19b7c87fe-with-play.gif)](https://www.loom.com/share/cf263b099ac3481082bb56d19b7c87fe "Media File Import on Buzz") + +**💡 Tip:** It is recommended to always select language to transcribe to as automatic language detection may result in unexpected results. diff --git a/docs/docs/usage/5_speaker_identification.md b/docs/docs/usage/5_speaker_identification.md new file mode 100644 index 00000000..f1c428f6 --- /dev/null +++ b/docs/docs/usage/5_speaker_identification.md @@ -0,0 +1,9 @@ +--- +title: Speaker identification +--- + +When transcript of some audio or video file is generated you can identify speakers in the transcript. Double-click the transcript in the list of transcripts to see additional options for editing and exporting. + +Transcription view screen has option to identify speakers. Click on the "Identify speakers" button so see available options. + +If audio file is still present on the system speaker identification will mark each speakers sentences with appropriate label. You can preview 10 seconds of some random sentence of the identified speaker and rename the automatically identified label to speakers real name. If "Merge speaker sentences" checkbox is selected when you save the speaker labels, all consecutive sentences of the same speaker wil lbe merged into one segment. Speaker identification is available since version 1.3.0. \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index b9191a23..d123ffb1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1275,44 +1275,47 @@ typing-inspect = ">=0.4.0,<1" [[package]] name = "datasets" -version = "2.2.1" +version = "3.5.0" description = "HuggingFace community-driven open-source library of datasets" optional = false -python-versions = "*" +python-versions = ">=3.9.0" groups = ["main"] files = [ - {file = "datasets-2.2.1-py3-none-any.whl", hash = "sha256:1938f3e99599422de50b9b54fe802aca854ed130382dab0b3820c821f7ae6d5e"}, - {file = "datasets-2.2.1.tar.gz", hash = "sha256:d362717c4394589b516c8f397ff20a6fe720454aed877ab61d06f3bc05df9544"}, + {file = "datasets-3.5.0-py3-none-any.whl", hash = "sha256:b3b7f163acc6ac4e01a1b00eef26d48bd4039288ceea3601d169272bd5581006"}, + {file = "datasets-3.5.0.tar.gz", hash = "sha256:9e39560e34f83a64e48ceca7adeb645ede3c3055c5cf48ed2b454f8ed2b89754"}, ] [package.dependencies] aiohttp = "*" -dill = "*" -fsspec = {version = ">=2021.05.0", extras = ["http"]} -huggingface-hub = ">=0.1.0,<1.0.0" -multiprocess = "*" +dill = ">=0.3.0,<0.3.9" +filelock = "*" +fsspec = {version = ">=2023.1.0,<=2024.12.0", extras = ["http"]} +huggingface-hub = ">=0.24.0" +multiprocess = "<0.70.17" numpy = ">=1.17" packaging = "*" pandas = "*" -pyarrow = ">=6.0.0" -requests = ">=2.19.0" -responses = "<0.19" -tqdm = ">=4.62.1" +pyarrow = ">=15.0.0" +pyyaml = ">=5.1" +requests = ">=2.32.2" +tqdm = ">=4.66.3" xxhash = "*" [package.extras] -apache-beam = ["apache-beam (>=2.26.0)"] -audio = ["librosa"] -benchmarks = ["numpy (==1.18.5)", "tensorflow (==2.3.0)", "torch (==1.6.0)", "transformers (==3.0.2)"] -dev = ["Pillow (>=6.2.1)", "Werkzeug (>=1.0.1)", "absl-py", "aiobotocore", "apache-beam (>=2.26.0)", "bert-score (>=0.3.6)", "black (>=22.0,<23.0)", "boto3", "botocore", "bs4", "conllu", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "flake8 (>=3.8.3)", "fsspec[s3]", "h5py", "importlib-resources ; python_version < \"3.7\"", "isort (>=5.0.0)", "jiwer", "langdetect", "librosa", "lxml", "lz4", "mauve-text", "moto[s3,server] (==2.0.4)", "mwparserfromhell", "nltk", "openpyxl", "py7zr", "pytest", "pytest-datadir", "pytest-xdist", "pyyaml (>=5.3.1)", "rarfile (>=4.0)", "requests-file (>=1.5.1)", "rouge-score", "s3fs (==2021.08.1)", "sacrebleu", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "soundfile", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "torch", "torchaudio", "transformers", "zstandard"] -docs = ["s3fs"] -quality = ["black (>=22.0,<23.0)", "flake8 (>=3.8.3)", "isort (>=5.0.0)", "pyyaml (>=5.3.1)"] -s3 = ["boto3", "botocore", "fsspec", "s3fs"] -tensorflow = ["tensorflow (>=2.2.0,!=2.6.0,!=2.6.1)"] -tensorflow-gpu = ["tensorflow-gpu (>=2.2.0,!=2.6.0,!=2.6.1)"] -tests = ["Pillow (>=6.2.1)", "Werkzeug (>=1.0.1)", "absl-py", "aiobotocore", "apache-beam (>=2.26.0)", "bert-score (>=0.3.6)", "boto3", "botocore", "bs4", "conllu", "elasticsearch (<8.0.0)", "faiss-cpu (>=1.6.4)", "fsspec[s3]", "h5py", "importlib-resources ; python_version < \"3.7\"", "jiwer", "langdetect", "librosa", "lxml", "lz4", "mauve-text", "moto[s3,server] (==2.0.4)", "mwparserfromhell", "nltk", "openpyxl", "py7zr", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "requests-file (>=1.5.1)", "rouge-score", "s3fs (==2021.08.1)", "sacrebleu", "scikit-learn", "scipy", "sentencepiece", "seqeval", "six (>=1.15.0,<1.16.0)", "soundfile", "tensorflow (>=2.3,!=2.6.0,!=2.6.1)", "texttable (>=1.6.3)", "tldextract", "tldextract (>=3.1.0)", "toml (>=0.10.1)", "torch", "torchaudio", "transformers", "zstandard"] +audio = ["librosa", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\""] +benchmarks = ["tensorflow (==2.12.0)", "torch (==2.0.1)", "transformers (==4.30.1)"] +dev = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (>=7.17.12,<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14) ; sys_platform != \"win32\"", "jaxlib (>=0.3.14) ; sys_platform != \"win32\"", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyav", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "ruff (>=0.3.0)", "s3fs", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\"", "sqlalchemy", "tensorflow (>=2.16.0) ; python_version >= \"3.10\"", "tensorflow (>=2.6.0)", "tensorflow (>=2.6.0) ; python_version < \"3.10\"", "tiktoken", "torch", "torch (>=2.0.0)", "torchdata", "torchvision", "transformers", "transformers (>=4.42.0)", "zstandard"] +docs = ["s3fs", "tensorflow (>=2.6.0)", "torch", "transformers"] +jax = ["jax (>=0.3.14)", "jaxlib (>=0.3.14)"] +pdfs = ["pdfplumber (>=0.11.4)"] +quality = ["ruff (>=0.3.0)"] +s3 = ["s3fs"] +tensorflow = ["tensorflow (>=2.6.0)"] +tensorflow-gpu = ["tensorflow (>=2.6.0)"] +tests = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (>=7.17.12,<8.0.0)", "faiss-cpu (>=1.8.0.post1)", "jax (>=0.3.14) ; sys_platform != \"win32\"", "jaxlib (>=0.3.14) ; sys_platform != \"win32\"", "joblib (<1.3.0)", "joblibspark", "librosa", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyav", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\"", "sqlalchemy", "tensorflow (>=2.16.0) ; python_version >= \"3.10\"", "tensorflow (>=2.6.0) ; python_version < \"3.10\"", "tiktoken", "torch (>=2.0.0)", "torchdata", "torchvision", "transformers (>=4.42.0)", "zstandard"] +tests-numpy2 = ["Pillow (>=9.4.0)", "absl-py", "decorator", "elasticsearch (>=7.17.12,<8.0.0)", "jax (>=0.3.14) ; sys_platform != \"win32\"", "jaxlib (>=0.3.14) ; sys_platform != \"win32\"", "joblib (<1.3.0)", "joblibspark", "lz4", "moto[server]", "polars[timezone] (>=0.20.0)", "protobuf (<4.0.0)", "py7zr", "pyav", "pyspark (>=3.4)", "pytest", "pytest-datadir", "pytest-xdist", "rarfile (>=4.0)", "s3fs (>=2021.11.1)", "soundfile (>=0.12.1)", "soundfile (>=0.12.1)", "soxr (>=0.4.0) ; python_version >= \"3.9\"", "sqlalchemy", "tiktoken", "torch (>=2.0.0)", "torchdata", "torchvision", "transformers (>=4.42.0)", "zstandard"] torch = ["torch"] -vision = ["Pillow (>=6.2.1)"] +vision = ["Pillow (>=9.4.0)"] [[package]] name = "decorator" @@ -1422,14 +1425,14 @@ dev = ["coverage", "flake8", "pdoc3", "torchvision"] [[package]] name = "dill" -version = "0.3.9" +version = "0.3.8" description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] files = [ - {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, - {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, ] [package.extras] @@ -1930,14 +1933,14 @@ files = [ [[package]] name = "fsspec" -version = "2025.3.0" +version = "2024.12.0" description = "File-system specification" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"}, - {file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"}, + {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, + {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, ] [package.dependencies] @@ -1967,7 +1970,7 @@ sftp = ["paramiko"] smb = ["smbprotocol"] ssh = ["paramiko"] test = ["aiohttp (!=4.0.0a0,!=4.0.0a1)", "numpy", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "requests"] -test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] +test-downstream = ["aiobotocore (>=2.5.4,<3.0.0)", "dask-expr", "dask[dataframe,test]", "moto[server] (>4,<5)", "pytest-timeout", "xarray"] test-full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "cloudpickle", "dask", "distributed", "dropbox", "dropboxdrivefs", "fastparquet", "fusepy", "gcsfs", "jinja2", "kerchunk", "libarchive-c", "lz4", "notebook", "numpy", "ocifs", "pandas", "panel", "paramiko", "pyarrow", "pyarrow (>=1)", "pyftpdlib", "pygit2", "pytest", "pytest-asyncio (!=0.22.0)", "pytest-benchmark", "pytest-cov", "pytest-mock", "pytest-recording", "pytest-rerunfailures", "python-snappy", "requests", "smbprotocol", "tqdm", "urllib3", "zarr", "zstandard"] tqdm = ["tqdm"] @@ -4046,32 +4049,28 @@ typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} [[package]] name = "multiprocess" -version = "0.70.17" +version = "0.70.16" description = "better multiprocessing and multithreading in Python" optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6"}, - {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62"}, - {file = "multiprocess-0.70.17-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2c82d0375baed8d8dd0d8c38eb87c5ae9c471f8e384ad203a36f095ee860f67"}, - {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_arm64.whl", hash = "sha256:a22a6b1a482b80eab53078418bb0f7025e4f7d93cc8e1f36481477a023884861"}, - {file = "multiprocess-0.70.17-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:349525099a0c9ac5936f0488b5ee73199098dac3ac899d81d326d238f9fd3ccd"}, - {file = "multiprocess-0.70.17-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:27b8409c02b5dd89d336107c101dfbd1530a2cd4fd425fc27dcb7adb6e0b47bf"}, - {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_arm64.whl", hash = "sha256:2ea0939b0f4760a16a548942c65c76ff5afd81fbf1083c56ae75e21faf92e426"}, - {file = "multiprocess-0.70.17-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:2b12e081df87ab755190e227341b2c3b17ee6587e9c82fecddcbe6aa812cd7f7"}, - {file = "multiprocess-0.70.17-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:a0f01cd9d079af7a8296f521dc03859d1a414d14c1e2b6e676ef789333421c95"}, - {file = "multiprocess-0.70.17-py310-none-any.whl", hash = "sha256:38357ca266b51a2e22841b755d9a91e4bb7b937979a54d411677111716c32744"}, - {file = "multiprocess-0.70.17-py311-none-any.whl", hash = "sha256:2884701445d0177aec5bd5f6ee0df296773e4fb65b11903b94c613fb46cfb7d1"}, - {file = "multiprocess-0.70.17-py312-none-any.whl", hash = "sha256:2818af14c52446b9617d1b0755fa70ca2f77c28b25ed97bdaa2c69a22c47b46c"}, - {file = "multiprocess-0.70.17-py313-none-any.whl", hash = "sha256:20c28ca19079a6c879258103a6d60b94d4ffe2d9da07dda93fb1c8bc6243f522"}, - {file = "multiprocess-0.70.17-py38-none-any.whl", hash = "sha256:1d52f068357acd1e5bbc670b273ef8f81d57863235d9fbf9314751886e141968"}, - {file = "multiprocess-0.70.17-py39-none-any.whl", hash = "sha256:c3feb874ba574fbccfb335980020c1ac631fbf2a3f7bee4e2042ede62558a021"}, - {file = "multiprocess-0.70.17.tar.gz", hash = "sha256:4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a"}, + {file = "multiprocess-0.70.16-pp310-pypy310_pp73-macosx_10_13_x86_64.whl", hash = "sha256:476887be10e2f59ff183c006af746cb6f1fd0eadcfd4ef49e605cbe2659920ee"}, + {file = "multiprocess-0.70.16-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d951bed82c8f73929ac82c61f01a7b5ce8f3e5ef40f5b52553b4f547ce2b08ec"}, + {file = "multiprocess-0.70.16-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:37b55f71c07e2d741374998c043b9520b626a8dddc8b3129222ca4f1a06ef67a"}, + {file = "multiprocess-0.70.16-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba8c31889abf4511c7308a8c52bb4a30b9d590e7f58523302ba00237702ca054"}, + {file = "multiprocess-0.70.16-pp39-pypy39_pp73-macosx_10_13_x86_64.whl", hash = "sha256:0dfd078c306e08d46d7a8d06fb120313d87aa43af60d66da43ffff40b44d2f41"}, + {file = "multiprocess-0.70.16-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e7b9d0f307cd9bd50851afaac0dba2cb6c44449efff697df7c7645f7d3f2be3a"}, + {file = "multiprocess-0.70.16-py310-none-any.whl", hash = "sha256:c4a9944c67bd49f823687463660a2d6daae94c289adff97e0f9d696ba6371d02"}, + {file = "multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a"}, + {file = "multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e"}, + {file = "multiprocess-0.70.16-py38-none-any.whl", hash = "sha256:a71d82033454891091a226dfc319d0cfa8019a4e888ef9ca910372a446de4435"}, + {file = "multiprocess-0.70.16-py39-none-any.whl", hash = "sha256:a0bafd3ae1b732eac64be2e72038231c1ba97724b60b09400d68f229fcc2fbf3"}, + {file = "multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1"}, ] [package.dependencies] -dill = ">=0.3.9" +dill = ">=0.3.8" [[package]] name = "musdb" @@ -6492,25 +6491,6 @@ design = ["optuna (>=2.10.0)"] docs = ["numpydoc", "sphinx (!=1.3.1)"] tests = ["pytest (<8)", "pytest-cov", "scipy (>=1.1)"] -[[package]] -name = "responses" -version = "0.18.0" -description = "A utility library for mocking out the `requests` Python library." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "responses-0.18.0-py3-none-any.whl", hash = "sha256:15c63ad16de13ee8e7182d99c9334f64fd81f1ee79f90748d527c28f7ca9dd51"}, - {file = "responses-0.18.0.tar.gz", hash = "sha256:380cad4c1c1dc942e5e8a8eaae0b4d4edf708f4f010db8b7bcfafad1fcd254ff"}, -] - -[package.dependencies] -requests = ">=2.0,<3.0" -urllib3 = ">=1.25.10" - -[package.extras] -tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=4.6)", "pytest-cov", "pytest-localserver", "types-mock", "types-requests"] - [[package]] name = "retrying" version = "1.3.4" @@ -8843,4 +8823,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.10,<3.13" -content-hash = "ffcf49c01fd9b29be1db0ee0a684e71c3ecb005f832d58dcc283089843421d16" +content-hash = "80185c3d6c54b658a79b574f19061da7aec5bd0aeb473b9c1880c205521ec825" diff --git a/whisper_diarization b/whisper_diarization new file mode 160000 index 00000000..6c9047dd --- /dev/null +++ b/whisper_diarization @@ -0,0 +1 @@ +Subproject commit 6c9047dd7334c48acde62042890fd357117a9f55