Adding Core ML support for WhisperCpp (#976)

This also changes how models for Whisper.cpp are downloaded. After update of the app models will need to be re-downloaded if you have them already downloaded.
This commit is contained in:
Raivis Dejus 2024-11-05 19:41:26 +02:00 committed by GitHub
commit 725031ebb8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
24 changed files with 655 additions and 401 deletions

2
.gitignore vendored
View file

@ -12,10 +12,12 @@ coverage.xml
# whisper_cpp
libwhisper.*
libwhisper-coreml.*
whisper_cpp
whisper_cpp.exe
whisper.dll
buzz/whisper_cpp.py
buzz/whisper_cpp_coreml.py
# Internationalization - compiled binaries
*.mo

View file

@ -47,6 +47,10 @@ binaries = [
(shutil.which("ffprobe"), "."),
]
# Include libwhisper-coreml.dylib on Apple Silicon
if platform.system() == "Darwin" and platform.machine() == "arm64":
binaries.append(("buzz/libwhisper-coreml.dylib", "."))
# Include dll_backup folder and its contents on Windows
if platform.system() == "Windows":
datas += [("dll_backup", "dll_backup")]

View file

@ -13,6 +13,7 @@ bundle_mac: dist/Buzz.app codesign_all_mac zip_mac notarize_zip staple_app_mac d
bundle_mac_unsigned: dist/Buzz.app zip_mac dmg_mac_unsigned
UNAME_S := $(shell uname -s)
UNAME_M := $(shell uname -m)
LIBWHISPER :=
ifeq ($(OS), Windows_NT)
@ -38,6 +39,8 @@ ifeq ($(OS), Windows_NT)
else
rm -f buzz/$(LIBWHISPER)
rm -f buzz/whisper_cpp.py
rm -f buzz/libwhisper-coreml.dylib || true
rm -f buzz/whisper_cpp_coreml.py || true
rm -rf whisper.cpp/build || true
rm -rf dist/* || true
endif
@ -88,9 +91,24 @@ else
cp whisper.cpp/build/bin/Debug/$(LIBWHISPER) buzz || true
cp whisper.cpp/build/$(LIBWHISPER) buzz || true
endif
# Build CoreML support on ARM Macs
ifeq ($(shell uname -m), arm64)
ifeq ($(shell uname -s), Darwin)
rm -rf whisper.cpp/build || true
cmake -S whisper.cpp -B whisper.cpp/build/ $(CMAKE_FLAGS) -DWHISPER_COREML=1
cmake --build whisper.cpp/build --verbose
cp whisper.cpp/build/bin/Debug/$(LIBWHISPER) buzz/libwhisper-coreml.dylib || true
cp whisper.cpp/build/$(LIBWHISPER) buzz/libwhisper-coreml.dylib || true
endif
endif
buzz/whisper_cpp.py: buzz/$(LIBWHISPER) translation_mo
cd buzz && ctypesgen ../whisper.cpp/whisper.h -lwhisper -o whisper_cpp.py
ifeq ($(shell uname -m), arm64)
ifeq ($(shell uname -s), Darwin)
cd buzz && ctypesgen ../whisper.cpp/whisper.h -lwhisper-coreml -o whisper_cpp_coreml.py
endif
endif
# Prints all the Mac developer identities used for code signing
print_identities_mac:

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 7C12.5523 7 13 7.44772 13 8V13C13 13.5523 12.5523 14 12 14C11.4477 14 11 13.5523 11 13V8C11 7.44772 11.4477 7 12 7Z" fill="#FF8C00"/>
<path d="M12 17C12.5523 17 13 16.5523 13 16C13 15.4477 12.5523 15 12 15C11.4477 15 11 15.4477 11 16C11 16.5523 11.4477 17 12 17Z" fill="#FF8C00"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12Z" fill="#FFD700"/>
</svg>

After

Width:  |  Height:  |  Size: 733 B

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2023-02-15 05:01+0000\n"
"Last-Translator: Jordi Mas i Hernàndez <jmas@softcatala.org>\n"
"Language-Team: Catalan <jmas@softcatala.org>\n"
@ -26,7 +26,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -35,7 +35,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -63,67 +63,67 @@ msgstr ""
msgid "Font Size"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "Enregistrament en viu"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
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:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
msgid "Invalid API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -180,45 +180,45 @@ msgstr ""
msgid "Huggingface ID of a Faster whisper model"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
msgid "Download"
msgstr "Baixada"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "Mostra la ubicació del fitxer"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "Suprimeix"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
msgid "Downloaded"
msgstr "Baixat"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "Disponible per baixar"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "Suprimeix el model"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
msgid "Are you sure you want to delete the selected model?"
msgstr "Esteu segur que voleu suprimir el model seleccionat?"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#, fuzzy
msgid "Download failed"
msgstr "Baixat"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "Error"
@ -240,19 +240,23 @@ msgstr "Detecta l'idioma"
msgid "Run"
msgstr "Executa"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "Tasca:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "Idioma:"
@ -560,7 +564,7 @@ msgstr ""
msgid "Transcribe"
msgstr "Obre una transcripció"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr ""

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2023-11-09 04:35-0600\n"
"Last-Translator: Adolfo Jayme Barrientos <fitojb@ubuntu.com>\n"
"Language-Team: \n"
@ -27,7 +27,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -36,7 +36,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -64,68 +64,68 @@ msgstr ""
msgid "Font Size"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr ""
# automatic translation
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "Grabación en vivo"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
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:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
msgid "Invalid API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -185,46 +185,46 @@ msgstr ""
msgid "Huggingface ID of a Faster whisper model"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
msgid "Download"
msgstr "Descargar"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "Mostrar ubicación de archivo"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "Eliminar"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
msgid "Downloaded"
msgstr "Descargado"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "Disponible para descarga"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "Eliminar modelo"
# automatic translation
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
msgid "Are you sure you want to delete the selected model?"
msgstr "¿Confirma que quiere eliminar el modelo seleccionado?"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#, fuzzy
msgid "Download failed"
msgstr "Descargado"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "Error"
@ -251,21 +251,25 @@ msgid "Run"
msgstr "Ejecutar"
# automatic translation
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "Modelo:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr ""
# automatic translation
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "Tarea:"
# automatic translation
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "Idioma:"
@ -603,7 +607,7 @@ msgstr ""
msgid "Transcribe"
msgstr "Abrir transcripción"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr ""

View file

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: buzz\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2024-11-03 11:22+0100\n"
"Language-Team: (Italiano) Albano Battistella <albanobattistella@gmail.com>\n"
"Language: it_IT\n"
@ -26,7 +26,7 @@ msgstr "https://esempio.com/audio.mp3"
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -35,7 +35,7 @@ msgstr "Ok"
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -62,27 +62,27 @@ msgstr "Ripristina impostazioni predefinite"
msgid "Font Size"
msgstr "Dimensione del carattere"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr "Test"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr "Chiave API OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr "URL di base di OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr "Nome file di esportazione predefinito"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr "Abilita l'esportazione della trascrizione della registrazione live"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:47
#: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py:50
msgid "Browse"
@ -96,12 +96,12 @@ msgstr "Esporta cartella"
msgid "Live recording mode"
msgstr "Modalità di registrazione in diretta"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr "Test della chiave API OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -113,7 +113,7 @@ msgstr ""
msgid "Invalid API key"
msgstr "Chiave API non valida"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=). Other characters in API "
"key may cause errors."
@ -121,11 +121,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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr "Seleziona la cartella di esportazione"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -182,35 +182,35 @@ msgstr "Gruppo"
msgid "Huggingface ID of a Faster whisper model"
msgstr "ID Huggingface di un modello Whisper più veloce"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
msgid "Download"
msgstr "Download"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "Mostra la posizione del file"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "Elimina"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
msgid "Downloaded"
msgstr "Scaricato"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "Disponibile per il download"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr "Link per scaricare il file modello ggml Whisper.cpp"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "Elimina modello"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
msgid "Are you sure you want to delete the selected model?"
msgstr "Sei sicuro di voler eliminare il modello selezionato?"
@ -218,8 +218,8 @@ msgstr "Sei sicuro di voler eliminare il modello selezionato?"
msgid "Download failed"
msgstr "Download non riuscito"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "Errore"
@ -241,19 +241,23 @@ msgstr "Rileva la lingua"
msgid "Run"
msgstr "Avvia"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "Modello:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr "Chiave API:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "Compito:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "Lingua:"
@ -555,7 +559,7 @@ msgstr "Impossibile salvare la chiave API OpenAI nel portachiavi"
msgid "Transcribe"
msgstr "Trascrivere"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr "Si è verificato un errore di connessione"

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: nunawa <71294849+nunawa@users.noreply.github.com>\n"
"Language-Team: \n"
@ -22,7 +22,7 @@ msgstr "https://example.com/audio.mp3"
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -31,7 +31,7 @@ msgstr "Ok"
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -58,47 +58,47 @@ msgstr "デフォルトに戻す"
msgid "Font Size"
msgstr "フォントサイズ"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr "テスト"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr "OpenAI APIキー"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr "OpenAI ベースURL"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr "デフォルトの出力ファイル名"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr "ライブ録音書き起こしの出力を有効にする"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr "出力フォルダ"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "ライブ録音"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr "OpenAI APIキー テスト"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -106,22 +106,22 @@ msgstr ""
"あなたのAPIキーは有効です。Buzzはこのキーを使ってWhisper APIの書き起こしとAI"
"翻訳を行います。"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#, fuzzy
msgid "Invalid API key"
msgstr "OpenAI APIキー"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr "出力フォルダを選択"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -179,44 +179,44 @@ msgstr "グループ"
msgid "Huggingface ID of a Faster whisper model"
msgstr "Faster whisperモデルのHuggingface ID"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
msgid "Download"
msgstr "ダウンロード"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "ファイルの場所を表示"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "削除"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
msgid "Downloaded"
msgstr "ダウンロード済み"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "ダウンロード可能"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr "Whisper.cpp ggmlモデルファイルのダウンロードリンク"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "モデルを削除"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
msgid "Are you sure you want to delete the selected model?"
msgstr "選択したモデルを本当に削除しますか?"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
msgid "Download failed"
msgstr "ダウンロード失敗"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "エラー"
@ -238,19 +238,23 @@ msgstr "自動検出"
msgid "Run"
msgstr "実行"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "モデル:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr "APIキー:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "タスク:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "言語:"
@ -550,7 +554,7 @@ msgstr "OpenAI API キーをkeyringに保存できません"
msgid "Transcribe"
msgstr "文字起こし"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr "接続エラーが発生しました"

View file

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"PO-Revision-Date: 2024-10-18 08:43+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2024-11-03 08:33+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: lv_LV\n"
@ -28,7 +28,7 @@ msgstr "https://example.com/audio.mp3"
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -37,7 +37,7 @@ msgstr "Labi"
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -64,48 +64,48 @@ msgstr "Atjaunot noklusētos"
msgid "Font Size"
msgstr "Fonta izmērs"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr "Pārbaudīt"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr "OpenAI API atslēga"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr "OpenAI adrese"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr "Eksporta fails"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr "Eksportēt dzīvā ieraksta transkriptus"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr "Eksportēt mapē"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
msgid "Live recording mode"
msgstr ""
"Dzīvā ieraksta\n"
"režīms"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr "OpenAI API atslēgas pārbaude"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -113,11 +113,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:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
msgid "Invalid API key"
msgstr "Nederīga API atslēga"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
msgid ""
"API supports only base64 characters (A-Za-z0-9+/=). Other characters in API "
"key may cause errors."
@ -125,11 +125,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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr "Izvēlieties mapi kurā eksportēt"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -187,44 +187,44 @@ msgstr "Veids"
msgid "Huggingface ID of a Faster whisper model"
msgstr "Faster Whisper modeļa Huggingface ID"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
msgid "Download"
msgstr "Lejupielādēt"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "Rādīt faila atrašanās vietu"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "Dzēst"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
msgid "Downloaded"
msgstr "Lejupielādēts"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "Pieejams lejupielādei"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr "Whisper.cpp ggml modeļa datnes lejupielādes saite"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "Dzēst modeli"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
msgid "Are you sure you want to delete the selected model?"
msgstr "Vai tiešām dzēst izvēlēto modeli?"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
msgid "Download failed"
msgstr "Lejupielāde neizdevās"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "Kļūda"
@ -246,19 +246,23 @@ msgstr "Noteikt valodu"
msgid "Run"
msgstr "Apstrādāt"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "Modelis:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 "Pirmā modeļa ielādes reize var aizņemt pat vairākas minūtes."
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr "API atslēga:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "Uzdevums:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "Valoda:"
@ -560,7 +564,7 @@ msgstr "Neizdevās saglabāt OpenAI API atslēgu atslēgu saišķī"
msgid "Transcribe"
msgstr "Atpazīt"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr "Notika savienojuma kļūda"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2024-03-17 20:50+0200\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -27,7 +27,7 @@ msgstr "https://przyklad.pl/audio.mp3"
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -36,7 +36,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -63,68 +63,68 @@ msgstr ""
msgid "Font Size"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "Nagrywanie na żywo"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
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:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#, fuzzy
msgid "Invalid API key"
msgstr "Nieprawidłowy URL"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -183,48 +183,48 @@ msgstr ""
msgid "Huggingface ID of a Faster whisper model"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
#, fuzzy
msgid "Download"
msgstr "Pobierz"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "Pokaż lokalizacje pliku"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "Usuń"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
#, fuzzy
msgid "Downloaded"
msgstr "Pobrany"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "Dostępne do pobrania"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "Usuń model"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
#, fuzzy
msgid "Are you sure you want to delete the selected model?"
msgstr "Czy na pewno chcesz usunąć zaznaczoną transkrypcję?"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#, fuzzy
msgid "Download failed"
msgstr "Pobrany"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "Błąd"
@ -246,19 +246,23 @@ msgstr "Wykryj język"
msgid "Run"
msgstr "Rozpocznij"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "Model:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "Zadanie:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "Język:"
@ -567,7 +571,7 @@ msgstr ""
msgid "Transcribe"
msgstr "Otwórz transkrypt"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr ""

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: Yevhen Popok <xalt7x.service@gmail.com>\n"
"Language-Team: \n"
@ -24,7 +24,7 @@ msgstr "https://example.com/audio.mp3"
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -33,7 +33,7 @@ msgstr "Гаразд"
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -60,47 +60,47 @@ msgstr "Типові значення"
msgid "Font Size"
msgstr "Розмір шрифту"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr "Тест"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr "API-ключ OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr "Базова адреса OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr "Типова назва файлу експорту"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr "Увімкнути експорт транскрипції з живого запису"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr "Тека для експорту"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "Живий запис"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr "Тест API-ключа OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -108,22 +108,22 @@ msgstr ""
"Ваш API-ключ дійсний. Buzz використає цей ключ для транскрипції з Whisper "
"API та перекладу ШІ."
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#, fuzzy
msgid "Invalid API key"
msgstr "API-ключ OpenAI"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr "Виберіть теку для експорту"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -181,44 +181,44 @@ msgstr "Група"
msgid "Huggingface ID of a Faster whisper model"
msgstr "Huggingface ID для моделі Faster Whisper"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
msgid "Download"
msgstr "Завантажити"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "Показати розташування файлу"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr "Видалити"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
msgid "Downloaded"
msgstr "Завантажене"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "Доступно для завантаження"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr "Посилання на завантаження файлу ggml моделі Whisper.cpp"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "Видалити модель"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
msgid "Are you sure you want to delete the selected model?"
msgstr "Ви впевнені, що хочете видалити вибрану модель?"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
msgid "Download failed"
msgstr "Невдале завантаження"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "Помилка"
@ -240,19 +240,23 @@ msgstr "Визначити мову"
msgid "Run"
msgstr "Запуск"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "Модель:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr "API-ключ:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "Завдання:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "Мова:"
@ -552,7 +556,7 @@ msgstr "Не вдається додати до звʼязки ключів API-
msgid "Transcribe"
msgstr "Розпізнати"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr "Виникла помилка зʼєднання"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2023-05-01 15:45+0800\n"
"Last-Translator: \n"
"Language-Team: lamb \n"
@ -28,7 +28,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -37,7 +37,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -64,47 +64,47 @@ msgstr "恢复默认"
msgid "Font Size"
msgstr "字体大小"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr "测试"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr "OpenAI API key"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr "OpenAI base url"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr "默认输出文件名"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr "启用实时录制转录导出"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr "导出文件夹"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "现场录制模式"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr "测试OpenAI API Key"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
msgid ""
"Your API key is valid. Buzz will use this key to perform Whisper API "
"transcriptions and AI translations."
@ -113,21 +113,21 @@ msgstr ""
“转录和人工智能翻译。”
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
msgid "Invalid API key"
msgstr "无效的API key"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr "选择输出文件夹"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -187,48 +187,48 @@ msgstr "组"
msgid "Huggingface ID of a Faster whisper model"
msgstr "更快的Whisper模型的Huggingface ID"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
#, fuzzy
msgid "Download"
msgstr "下载"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr "查看文件位置"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
#, fuzzy
msgid "Downloaded"
msgstr "下载模型"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr "删除"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr "删除模型"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
#, fuzzy
msgid "Are you sure you want to delete the selected model?"
msgstr "您确定要删除所选录制吗?此操作无法撤消。"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#, fuzzy
msgid "Download failed"
msgstr "下载模型"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr "错误"
@ -250,19 +250,23 @@ msgstr "检测语言"
msgid "Run"
msgstr "开始执行"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "模型:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr "Api Key:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "任务:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "语言:"
@ -567,7 +571,7 @@ msgstr "无法将OpenAI API密钥保存到密钥串"
msgid "Transcribe"
msgstr "转换"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr "连接发生错误"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-18 08:41+0300\n"
"POT-Creation-Date: 2024-11-03 08:32+0200\n"
"PO-Revision-Date: 2023-05-01 15:45+0800\n"
"Last-Translator: \n"
"Language-Team: Lamb\n"
@ -27,7 +27,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:28
#: buzz/widgets/preferences_dialog/preferences_dialog.py:69
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:244
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/transcriber/advanced_settings_dialog.py:97
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:295
#: buzz/widgets/main_window.py:234
@ -36,7 +36,7 @@ msgstr ""
#: buzz/widgets/import_url_dialog.py:29
#: buzz/widgets/preferences_dialog/preferences_dialog.py:70
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:245
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:246
#: buzz/widgets/transcription_viewer/transcription_viewer_widget.py:296
#: buzz/widgets/model_download_progress_dialog.py:29
#: buzz/widgets/main_window.py:235
@ -63,67 +63,67 @@ msgstr ""
msgid "Font Size"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:60
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:61
msgid "Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:66
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:67
msgid "OpenAI API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:79
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:80
msgid "OpenAI base url"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:88
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:89
msgid "Default export file name"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:94
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:95
msgid "Enable live recording transcription export"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:100
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:101
#: 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:119
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:120
msgid "Export folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:130
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:131
#, fuzzy
msgid "Live recording mode"
msgstr "現場錄製"
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:155
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:161
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:162
msgid "OpenAI API Key Test"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:156
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:157
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:172
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
msgid "Invalid API key"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:173
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:174
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:191
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:192
msgid "Select Export Folder"
msgstr ""
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:243
#: buzz/widgets/preferences_dialog/general_preferences_widget.py:244
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 "
@ -181,48 +181,48 @@ msgstr ""
msgid "Huggingface ID of a Faster whisper model"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:93
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:94
#, fuzzy
msgid "Download"
msgstr "下載模型"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:98
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:99
msgid "Show file location"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:106
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:107
msgid "Delete"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:137
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:138
#, fuzzy
msgid "Downloaded"
msgstr "下載模型"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:142
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:143
msgid "Available for Download"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:163
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:164
msgid "Download link to Whisper.cpp ggml model file"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:238
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
msgid "Delete Model"
msgstr ""
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:239
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:240
#, fuzzy
msgid "Are you sure you want to delete the selected model?"
msgstr "您確定要刪除所選錄製嗎?此操作無法撤消。"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:267
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#, fuzzy
msgid "Download failed"
msgstr "下載模型"
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:268
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:473
#: buzz/widgets/preferences_dialog/models_preferences_widget.py:269
#: buzz/widgets/main_window.py:291 buzz/model_loader.py:503
msgid "Error"
msgstr ""
@ -244,19 +244,23 @@ msgstr "檢測語言"
msgid "Run"
msgstr "開始執行"
#: buzz/widgets/transcriber/transcription_options_group_box.py:88
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
msgid "Model:"
msgstr "模型:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:91
#: 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 ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:113
msgid "Api Key:"
msgstr ""
#: buzz/widgets/transcriber/transcription_options_group_box.py:92
#: buzz/widgets/transcriber/transcription_options_group_box.py:114
msgid "Task:"
msgstr "任務:"
#: buzz/widgets/transcriber/transcription_options_group_box.py:93
#: buzz/widgets/transcriber/transcription_options_group_box.py:115
msgid "Language:"
msgstr "語言:"
@ -561,7 +565,7 @@ msgstr ""
msgid "Transcribe"
msgstr "打開轉換結果"
#: buzz/model_loader.py:502
#: buzz/model_loader.py:532
msgid "A connection error occurred"
msgstr ""

View file

@ -10,16 +10,16 @@ import sys
import tempfile
import warnings
import platform
import requests
import whisper
import huggingface_hub
import zipfile
from dataclasses import dataclass
from typing import Optional, List
import requests
from PyQt6.QtCore import QObject, pyqtSignal, QRunnable
from platformdirs import user_cache_dir
import faster_whisper
import whisper
import huggingface_hub
from huggingface_hub.errors import LocalEntryNotFoundError
from buzz.locale import _
@ -205,7 +205,7 @@ class TranscriptionModel:
def get_local_model_path(self) -> Optional[str]:
if self.model_type == ModelType.WHISPER_CPP:
file_path = get_whisper_cpp_file_path(size=self.whisper_model_size)
if not os.path.exists(file_path) or not os.path.isfile(file_path):
if not file_path or not os.path.exists(file_path) or not os.path.isfile(file_path):
return None
return file_path
@ -241,21 +241,27 @@ class TranscriptionModel:
raise Exception("Unknown model type")
WHISPER_CPP_MODELS_SHA256 = {
"tiny": "be07e048e1e599ad46341c8d2a135645097a538221678b7acdd1b1919c6e1b21",
"base": "60ed5bc3dd14eea856493d334349b405782ddcaf0028d4b5df4088345fba2efe",
"small": "1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b",
"medium": "6c14d5adee5f86394037b4e4e8b59f1673b6cee10e3cf0b11bbdbee79c156208",
"large-v1": "7d99f41a10525d0206bddadd86760181fa920438b6b33237e3118ff6c83bb53d",
"large-v2": "9a423fe4d40c82774b6af34115b8b935f34152246eb19e80e376071d3f999487",
"large-v3": "64d182b440b98d5203c4f9bd541544d84c605196c4f7b845dfa11fb23594d1e2",
"large-v3-turbo": "1fc70f774d38eb169993ac391eea357ef47c88757ef72ee5943879b7e8e2bc69",
"custom": None,
}
WHISPER_CPP_REPO_ID = "ggerganov/whisper.cpp"
def get_whisper_cpp_file_path(size: WhisperModelSize) -> str:
return os.path.join(model_root_dir, f"ggml-model-whisper-{size.value}.bin")
if size == WhisperModelSize.CUSTOM:
return os.path.join(model_root_dir, f"ggml-model-whisper-custom.bin")
model_filename = f"ggml-{size.to_whisper_cpp_model_size()}.bin"
try:
model_path = huggingface_hub.snapshot_download(
repo_id=WHISPER_CPP_REPO_ID,
allow_patterns=[model_filename],
local_files_only=True,
cache_dir=model_root_dir,
etag_timeout=60
)
return os.path.join(model_path, model_filename)
except LocalEntryNotFoundError:
return ''
def get_whisper_file_path(size: WhisperModelSize) -> str:
@ -434,6 +440,7 @@ class ModelDownloader(QRunnable):
def __init__(self, model: TranscriptionModel, custom_model_url: Optional[str] = None):
super().__init__()
self.is_coreml_supported = platform.system() == "Darwin" and platform.machine() == "arm64"
self.signals = self.Signals()
self.model = model
self.stopped = False
@ -443,22 +450,41 @@ class ModelDownloader(QRunnable):
logging.debug("Downloading model: %s, %s", self.model, self.model.hugging_face_model_id)
if self.model.model_type == ModelType.WHISPER_CPP:
model_name = self.model.whisper_model_size.to_whisper_cpp_model_size()
if self.custom_model_url:
url = self.custom_model_url
else:
url = huggingface_hub.hf_hub_url(
repo_id="ggerganov/whisper.cpp",
filename=f"ggml-{model_name}.bin",
)
file_path = get_whisper_cpp_file_path(size=self.model.whisper_model_size)
return self.download_model_to_path(url=url, file_path=file_path)
file_path = get_whisper_cpp_file_path(size=self.model.whisper_model_size)
expected_sha256 = WHISPER_CPP_MODELS_SHA256[model_name]
return self.download_model_to_path(
url=url, file_path=file_path, expected_sha256=expected_sha256
model_name = self.model.whisper_model_size.to_whisper_cpp_model_size()
whisper_cpp_model_files = [
f"ggml-{model_name}.bin",
"README.md"
]
num_large_files = 1
if self.is_coreml_supported:
whisper_cpp_model_files = [
f"ggml-{model_name}.bin",
f"ggml-{model_name}-encoder.mlmodelc.zip",
"README.md"
]
num_large_files = 2
model_path = download_from_huggingface(
repo_id=WHISPER_CPP_REPO_ID,
allow_patterns=whisper_cpp_model_files,
progress=self.signals.progress,
num_large_files=num_large_files
)
if self.is_coreml_supported:
with zipfile.ZipFile(
os.path.join(model_path, f"ggml-{model_name}-encoder.mlmodelc.zip"), 'r') as zip_ref:
zip_ref.extractall(model_path)
self.signals.finished.emit(os.path.join(model_path, f"ggml-{model_name}.bin"))
return
if self.model.model_type == ModelType.WHISPER:
url = whisper._MODELS[self.model.whisper_model_size.value]
file_path = get_whisper_file_path(size=self.model.whisper_model_size)
@ -496,7 +522,7 @@ class ModelDownloader(QRunnable):
raise Exception("Invalid model type: " + self.model.model_type.value)
def download_model_to_path(
self, url: str, file_path: str, expected_sha256: Optional[str]
self, url: str, file_path: str, expected_sha256: Optional[str] = None
):
try:
downloaded = self.download_model(url, file_path, expected_sha256)

View file

@ -3,6 +3,7 @@ import logging
import platform
import os
import wave
import time
import tempfile
import threading
from typing import Optional
@ -15,11 +16,11 @@ from sounddevice import PortAudioError
from openai import OpenAI
from PyQt6.QtCore import QObject, pyqtSignal
from buzz import transformers_whisper, whisper_audio
from buzz import whisper_audio
from buzz.model_loader import WhisperModelSize, ModelType, get_custom_api_whisper_model
from buzz.settings.settings import Settings
from buzz.transcriber.transcriber import TranscriptionOptions, Task
from buzz.transcriber.whisper_cpp import WhisperCpp, whisper_cpp_params
from buzz.transcriber.whisper_cpp import WhisperCpp
from buzz.transformers_whisper import TransformersWhisper
from buzz.settings.recording_transcriber_mode import RecordingTranscriberMode
@ -52,13 +53,13 @@ class RecordingTranscriber(QObject):
self.input_device_index = input_device_index
self.sample_rate = sample_rate if sample_rate is not None else whisper_audio.SAMPLE_RATE
self.model_path = model_path
self.n_batch_samples = 5 * self.sample_rate # every 5 seconds
self.n_batch_samples = 5 * self.sample_rate # 5 seconds
self.keep_sample_seconds = 0.15
if self.transcriber_mode == RecordingTranscriberMode.APPEND_AND_CORRECT:
self.n_batch_samples = 3 * self.sample_rate # every 3 seconds
self.n_batch_samples = 3 * self.sample_rate # 3 seconds
self.keep_sample_seconds = 1.5
# pause queueing if more than 5 batches behind
self.max_queue_size = 5 * self.n_batch_samples
# pause queueing if more than 3 batches behind
self.max_queue_size = 3 * self.n_batch_samples
self.queue = np.ndarray([], dtype=np.float32)
self.mutex = threading.Lock()
self.sounddevice = sounddevice
@ -136,8 +137,8 @@ class RecordingTranscriber(QObject):
callback=self.stream_callback,
):
while self.is_running:
self.mutex.acquire()
if self.queue.size >= self.n_batch_samples:
self.mutex.acquire()
samples = self.queue[: self.n_batch_samples]
self.queue = self.queue[self.n_batch_samples - keep_samples:]
self.mutex.release()
@ -153,8 +154,8 @@ class RecordingTranscriber(QObject):
# TODO Filter out silent audio
if (
self.transcription_options.model.model_type
== ModelType.WHISPER
self.transcription_options.model.model_type
== ModelType.WHISPER
):
assert isinstance(model, whisper.Whisper)
result = model.transcribe(
@ -165,13 +166,13 @@ class RecordingTranscriber(QObject):
temperature=self.transcription_options.temperature,
)
elif (
self.transcription_options.model.model_type
== ModelType.WHISPER_CPP
self.transcription_options.model.model_type
== ModelType.WHISPER_CPP
):
assert isinstance(model, WhisperCpp)
result = model.transcribe(
audio=samples,
params=whisper_cpp_params(
params=model.get_params(
transcription_options=self.transcription_options
),
)
@ -254,7 +255,8 @@ class RecordingTranscriber(QObject):
)
self.transcription.emit(next_text)
else:
self.mutex.release()
time.sleep(0.5)
except PortAudioError as exc:
self.error.emit(str(exc))
logging.exception("")

View file

@ -1,3 +1,4 @@
import platform
import os
import ctypes
import logging
@ -13,9 +14,30 @@ if LOADED_WHISPER_CPP_BINARY:
from buzz import whisper_cpp
IS_COREML_SUPPORTED = False
if platform.system() == "Darwin" and platform.machine() == "arm64":
try:
from buzz import whisper_cpp_coreml # noqa: F401
IS_COREML_SUPPORTED = True
except ImportError:
logging.exception("")
class WhisperCpp:
def __init__(self, model: str) -> None:
self.ctx = whisper_cpp.whisper_init_from_file(model.encode())
self.is_coreml_supported = IS_COREML_SUPPORTED
if self.is_coreml_supported:
coreml_model = model.replace(".bin", "-encoder.mlmodelc")
if not os.path.exists(coreml_model):
self.is_coreml_supported = False
logging.debug(f"WhisperCpp model {model}, (Core ML: {self.is_coreml_supported})")
self.instance = self.get_instance()
self.ctx = self.instance.init_from_file(model)
self.segments: List[Segment] = []
def append_segment(self, txt: bytes, start: int, end: int):
@ -46,13 +68,13 @@ class WhisperCpp:
logging.debug("Loaded audio with length = %s", len(audio))
whisper_cpp_audio = audio.ctypes.data_as(ctypes.POINTER(ctypes.c_float))
result = whisper_cpp.whisper_full(
result = self.instance.full(
self.ctx, params, whisper_cpp_audio, len(audio)
)
if result != 0:
raise Exception(f"Error from whisper.cpp: {result}")
n_segments = whisper_cpp.whisper_full_n_segments(self.ctx)
n_segments = self.instance.full_n_segments(self.ctx)
if params.token_timestamps:
# Will process word timestamps
@ -61,9 +83,9 @@ class WhisperCpp:
txt_end = 0
for i in range(n_segments):
txt = whisper_cpp.whisper_full_get_segment_text(self.ctx, i)
start = whisper_cpp.whisper_full_get_segment_t0(self.ctx, i)
end = whisper_cpp.whisper_full_get_segment_t1(self.ctx, i)
txt = self.instance.full_get_segment_text(self.ctx, i)
start = self.instance.full_get_segment_t0(self.ctx, i)
end = self.instance.full_get_segment_t1(self.ctx, i)
if txt.startswith(b' ') and self.append_segment(txt_buffer, txt_start, txt_end):
txt_buffer = txt
@ -87,9 +109,9 @@ class WhisperCpp:
else:
for i in range(n_segments):
txt = whisper_cpp.whisper_full_get_segment_text(self.ctx, i)
start = whisper_cpp.whisper_full_get_segment_t0(self.ctx, i)
end = whisper_cpp.whisper_full_get_segment_t1(self.ctx, i)
txt = self.instance.full_get_segment_text(self.ctx, i)
start = self.instance.full_get_segment_t0(self.ctx, i)
end = self.instance.full_get_segment_t1(self.ctx, i)
self.append_segment(txt, start, end)
@ -98,30 +120,134 @@ class WhisperCpp:
"text": "".join([segment.text for segment in self.segments]),
}
def get_instance(self):
if self.is_coreml_supported:
return WhisperCppCoreML()
return WhisperCppCpu()
def get_params(
self,
transcription_options: TranscriptionOptions,
print_realtime=False,
print_progress=False,
):
params = self.instance.full_default_params(whisper_cpp.WHISPER_SAMPLING_GREEDY)
params.n_threads = int(os.getenv("BUZZ_WHISPERCPP_N_THREADS", 4))
params.print_realtime = print_realtime
params.print_progress = print_progress
params.language = self.instance.get_string((transcription_options.language or "en"))
params.translate = transcription_options.task == Task.TRANSLATE
params.max_len = ctypes.c_int(1)
params.max_len = 1 if transcription_options.word_level_timings else 0
params.token_timestamps = transcription_options.word_level_timings
params.initial_prompt = self.instance.get_string(transcription_options.initial_prompt)
return params
def __del__(self):
whisper_cpp.whisper_free(self.ctx)
if self.instance:
self.instance.free(self.ctx)
def whisper_cpp_params(
transcription_options: TranscriptionOptions,
print_realtime=False,
print_progress=False,
):
params = whisper_cpp.whisper_full_default_params(
whisper_cpp.WHISPER_SAMPLING_GREEDY
)
params.n_threads = int(os.getenv("BUZZ_WHISPERCPP_N_THREADS", 4))
params.print_realtime = print_realtime
params.print_progress = print_progress
class WhisperCppInterface:
def full_default_params(self, sampling: int):
raise NotImplementedError
params.language = whisper_cpp.String(
(transcription_options.language or "en").encode()
)
params.translate = transcription_options.task == Task.TRANSLATE
params.max_len = ctypes.c_int(1)
params.max_len = 1 if transcription_options.word_level_timings else 0
params.token_timestamps = transcription_options.word_level_timings
params.initial_prompt = whisper_cpp.String(
transcription_options.initial_prompt.encode()
)
return params
def get_string(self, string: str):
raise NotImplementedError
def get_encoder_begin_callback(self, callback):
raise NotImplementedError
def get_new_segment_callback(self, callback):
raise NotImplementedError
def init_from_file(self, model: str):
raise NotImplementedError
def full(self, ctx, params, audio, length):
raise NotImplementedError
def full_n_segments(self, ctx):
raise NotImplementedError
def full_get_segment_text(self, ctx, i):
raise NotImplementedError
def full_get_segment_t0(self, ctx, i):
raise NotImplementedError
def full_get_segment_t1(self, ctx, i):
raise NotImplementedError
def free(self, ctx):
raise NotImplementedError
class WhisperCppCpu(WhisperCppInterface):
def full_default_params(self, sampling: int):
return whisper_cpp.whisper_full_default_params(sampling)
def get_string(self, string: str):
return whisper_cpp.String(string.encode())
def get_encoder_begin_callback(self, callback):
return whisper_cpp.whisper_encoder_begin_callback(callback)
def get_new_segment_callback(self, callback):
return whisper_cpp.whisper_new_segment_callback(callback)
def init_from_file(self, model: str):
return whisper_cpp.whisper_init_from_file(model.encode())
def full(self, ctx, params, audio, length):
return whisper_cpp.whisper_full(ctx, params, audio, length)
def full_n_segments(self, ctx):
return whisper_cpp.whisper_full_n_segments(ctx)
def full_get_segment_text(self, ctx, i):
return whisper_cpp.whisper_full_get_segment_text(ctx, i)
def full_get_segment_t0(self, ctx, i):
return whisper_cpp.whisper_full_get_segment_t0(ctx, i)
def full_get_segment_t1(self, ctx, i):
return whisper_cpp.whisper_full_get_segment_t1(ctx, i)
def free(self, ctx):
return whisper_cpp.whisper_free(ctx)
class WhisperCppCoreML(WhisperCppInterface):
def full_default_params(self, sampling: int):
return whisper_cpp_coreml.whisper_full_default_params(sampling)
def get_string(self, string: str):
return whisper_cpp_coreml.String(string.encode())
def get_encoder_begin_callback(self, callback):
return whisper_cpp_coreml.whisper_encoder_begin_callback(callback)
def get_new_segment_callback(self, callback):
return whisper_cpp_coreml.whisper_new_segment_callback(callback)
def init_from_file(self, model: str):
return whisper_cpp_coreml.whisper_init_from_file(model.encode())
def full(self, ctx, params, audio, length):
return whisper_cpp_coreml.whisper_full(ctx, params, audio, length)
def full_n_segments(self, ctx):
return whisper_cpp_coreml.whisper_full_n_segments(ctx)
def full_get_segment_text(self, ctx, i):
return whisper_cpp_coreml.whisper_full_get_segment_text(ctx, i)
def full_get_segment_t0(self, ctx, i):
return whisper_cpp_coreml.whisper_full_get_segment_t0(ctx, i)
def full_get_segment_t1(self, ctx, i):
return whisper_cpp_coreml.whisper_full_get_segment_t1(ctx, i)
def free(self, ctx):
return whisper_cpp_coreml.whisper_free(ctx)

View file

@ -6,13 +6,9 @@ from typing import Optional, List
from PyQt6.QtCore import QObject
from buzz import whisper_audio
from buzz.model_loader import LOADED_WHISPER_CPP_BINARY
from buzz.transcriber.file_transcriber import FileTranscriber
from buzz.transcriber.transcriber import FileTranscriptionTask, Segment, Stopped
from buzz.transcriber.whisper_cpp import WhisperCpp, whisper_cpp_params
if LOADED_WHISPER_CPP_BINARY:
from buzz import whisper_cpp
from buzz.transcriber.whisper_cpp import WhisperCpp
class WhisperCppFileTranscriber(FileTranscriber):
@ -29,11 +25,11 @@ class WhisperCppFileTranscriber(FileTranscriber):
self.transcription_options = task.transcription_options
self.model_path = task.model_path
self.model = WhisperCpp(model=self.model_path)
self.state = self.State()
def transcribe(self) -> List[Segment]:
self.state.running = True
model_path = self.model_path
logging.debug(
"Starting whisper_cpp file transcription, file path = %s, language = %s, "
@ -41,29 +37,28 @@ class WhisperCppFileTranscriber(FileTranscriber):
self.transcription_task.file_path,
self.transcription_options.language,
self.transcription_options.task,
model_path,
self.model_path,
self.transcription_options.word_level_timings,
)
audio = whisper_audio.load_audio(self.transcription_task.file_path)
self.duration_audio_ms = len(audio) * 1000 / whisper_audio.SAMPLE_RATE
whisper_params = whisper_cpp_params(
whisper_params = self.model.get_params(
transcription_options=self.transcription_options
)
whisper_params.encoder_begin_callback_user_data = ctypes.c_void_p(
id(self.state)
)
whisper_params.encoder_begin_callback = (
whisper_cpp.whisper_encoder_begin_callback(self.encoder_begin_callback)
self.model.get_instance().get_encoder_begin_callback(self.encoder_begin_callback)
)
whisper_params.new_segment_callback_user_data = ctypes.c_void_p(id(self.state))
whisper_params.new_segment_callback = whisper_cpp.whisper_new_segment_callback(
whisper_params.new_segment_callback = self.model.get_instance().get_new_segment_callback(
self.new_segment_callback
)
model = WhisperCpp(model=model_path)
result = model.transcribe(
result = self.model.transcribe(
audio=self.transcription_task.file_path, params=whisper_params
)
@ -74,8 +69,8 @@ class WhisperCppFileTranscriber(FileTranscriber):
return result["segments"]
def new_segment_callback(self, ctx, _state, _n_new, user_data):
n_segments = whisper_cpp.whisper_full_n_segments(ctx)
t1 = whisper_cpp.whisper_full_get_segment_t1(ctx, n_segments - 1)
n_segments = self.model.get_instance().full_n_segments(ctx)
t1 = self.model.get_instance().full_get_segment_t1(ctx, n_segments - 1)
# t1 seems to sometimes be larger than the duration when the
# audio ends in silence. Trim to fix the displayed progress.
progress = min(t1 * 10, self.duration_audio_ms)

View file

@ -92,6 +92,7 @@ class VisibilityIcon(Icon):
BUZZ_ICON_PATH = get_path("assets/buzz.ico")
BUZZ_LARGE_ICON_PATH = get_path("assets/buzz-icon-1024.png")
INFO_ICON_PATH = get_path("assets/info-circle.svg")
RECORD_ICON_PATH = get_path("assets/mic_FILL0_wght700_GRAD0_opsz48.svg")
EXPAND_ICON_PATH = get_path("assets/open_in_full_FILL0_wght700_GRAD0_opsz48.svg")
ADD_ICON_PATH = get_path("assets/add_FILL0_wght700_GRAD0_opsz48.svg")

View file

@ -56,6 +56,7 @@ class GeneralPreferencesWidget(QWidget):
self.on_openai_api_key_changed
)
self.openai_api_key_line_edit.focus_out.connect(self.on_openai_api_key_focus_out)
self.openai_api_key_line_edit.setMinimumWidth(200)
self.test_openai_api_key_button = QPushButton(_("Test"))
self.test_openai_api_key_button.clicked.connect(

View file

@ -85,6 +85,7 @@ class ModelsPreferencesWidget(QWidget):
self.custom_model_id_input.hide()
self.custom_model_link_input = LineEdit()
self.custom_model_link_input.setMinimumWidth(255)
self.custom_model_link_input.setObjectName("ModelLinkInput")
self.custom_model_link_input.textChanged.connect(self.on_custom_model_link_input_changed)
layout.addRow("", self.custom_model_link_input)

View file

@ -36,7 +36,7 @@ class HuggingFaceSearchLineEdit(LineEdit):
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
self.setPlaceholderText(_("Huggingface ID of a model"))
self.setMinimumWidth(150)
self.setMinimumWidth(255)
self.timer = QTimer(self)
self.timer.setSingleShot(True)

View file

@ -1,12 +1,15 @@
import os
import logging
import platform
from typing import Optional, List
from PyQt6.QtCore import pyqtSignal
from PyQt6.QtWidgets import QGroupBox, QWidget, QFormLayout, QComboBox
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QGroupBox, QWidget, QFormLayout, QComboBox, QLabel, QHBoxLayout
from buzz.locale import _
from buzz.settings.settings import Settings
from buzz.widgets.icon import INFO_ICON_PATH
from buzz.model_loader import ModelType, WhisperModelSize, get_whisper_cpp_file_path
from buzz.transcriber.transcriber import TranscriptionOptions, Task
from buzz.widgets.model_type_combo_box import ModelTypeComboBox
@ -87,7 +90,26 @@ class TranscriptionOptionsGroupBox(QGroupBox):
self.advanced_settings_button.clicked.connect(self.open_advanced_settings)
self.form_layout.addRow(_("Model:"), self.model_type_combo_box)
self.form_layout.addRow("", self.whisper_model_size_combo_box)
if platform.system() == "Darwin" and platform.machine() == "arm64":
self.whisper_model_size_layout = QHBoxLayout()
self.whisper_model_size_layout.setContentsMargins(0, 0, 0, 0)
self.whisper_model_size_layout.setSpacing(0)
self.whisper_model_size_layout.addWidget(self.whisper_model_size_combo_box)
self.load_note_tooltip_icon = QLabel()
self.load_note_tooltip_icon.setPixmap(QIcon(INFO_ICON_PATH).pixmap(23, 23))
self.load_note_tooltip_icon.setToolTip(
_("First time use of a model may take up to several minutest to load."))
self.whisper_model_size_layout.addWidget(self.load_note_tooltip_icon)
self.form_layout.addRow("", self.whisper_model_size_layout)
else:
self.load_note_tooltip_icon = None
self.whisper_model_size_layout = None
self.form_layout.addRow("", self.whisper_model_size_combo_box)
self.form_layout.addRow("", self.hugging_face_search_line_edit)
self.form_layout.addRow(_("Api Key:"), self.openai_access_token_edit)
self.form_layout.addRow(_("Task:"), self.tasks_combo_box)
@ -176,10 +198,24 @@ class TranscriptionOptionsGroupBox(QGroupBox):
or (model_type == ModelType.WHISPER_CPP)
or (model_type == ModelType.FASTER_WHISPER),
)
if self.whisper_model_size_layout is not None:
self.form_layout.setRowVisible(
self.whisper_model_size_layout,
(model_type == ModelType.WHISPER)
or (model_type == ModelType.WHISPER_CPP)
or (model_type == ModelType.FASTER_WHISPER),
)
self.form_layout.setRowVisible(
self.openai_access_token_edit, model_type == ModelType.OPEN_AI_WHISPER_API
)
# Note on Apple Silicon Macs
if self.load_note_tooltip_icon is not None:
self.load_note_tooltip_icon.setVisible(
self.transcription_options.model.model_type == ModelType.WHISPER_CPP
)
def on_model_type_changed(self, model_type: ModelType):
self.transcription_options.model.model_type = model_type
if not model_type.supports_initial_prompt:

View file

@ -6,7 +6,7 @@ authors = ["Chidi Williams <williamschidi1@gmail.com>"]
license = "MIT"
readme = "README.md"
include = [
"buzz/libwhisper.*", "buzz/*.dll", "buzz/whisper_cpp.py", "buzz/locale/*/LC_MESSAGES/buzz.mo",
"buzz/libwhisper.*", "buzz/libwhisper-coreml.*", "buzz/*.dll", "buzz/whisper_cpp.py", "buzz/locale/*/LC_MESSAGES/buzz.mo",
"buzz/dll_backup/*",
]
repository = "https://github.com/chidiwilliams/buzz"

View file

@ -1,6 +1,6 @@
from buzz.model_loader import TranscriptionModel, ModelType, WhisperModelSize
from buzz.transcriber.transcriber import TranscriptionOptions, Task
from buzz.transcriber.whisper_cpp import WhisperCpp, whisper_cpp_params
from buzz.transcriber.whisper_cpp import WhisperCpp
from tests.audio import test_audio_path
from tests.model_loader import get_model_path
@ -19,7 +19,7 @@ class TestWhisperCpp:
model_path = get_model_path(transcription_options.model)
whisper_cpp = WhisperCpp(model=model_path)
params = whisper_cpp_params(transcription_options=transcription_options)
params = whisper_cpp.get_params(transcription_options=transcription_options)
result = whisper_cpp.transcribe(audio=test_audio_path, params=params)
assert "Bienvenue dans Passe" in result["text"]