Anchor-annotator 0.7.1__py3-none-any.whl → 0.8.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
anchor/settings.py CHANGED
@@ -46,6 +46,9 @@ class AnchorSettings(QtCore.QSettings):
46
46
  IE_MODEL_PATH = "ie_model_path"
47
47
  PHONE_MAPPING_PATH = "phone_mapping_path"
48
48
  REFERENCE_ALIGNMENT_PATH = "reference_alignment_path"
49
+ LANGUAGE = "language"
50
+ VAD_MODEL = "kaldi"
51
+ SPECTRAL_FEATURES = "spectrogram"
49
52
 
50
53
  AUTOSAVE = "anchor/autosave"
51
54
  AUTOLOAD = "anchor/autoload"
@@ -99,6 +102,7 @@ class AnchorSettings(QtCore.QSettings):
99
102
  LOCKED = "anchor/locked"
100
103
  CUDA = "anchor/cuda"
101
104
  GITHUB_TOKEN = "anchor/github_token"
105
+ HF_TOKEN = "anchor/hf_token"
102
106
  TIME_DIRECTION = "anchor/time_direction"
103
107
  RTL = "Right-to-left"
104
108
  LTR = "Left-to-right"
@@ -177,8 +181,8 @@ class AnchorSettings(QtCore.QSettings):
177
181
  AnchorSettings.ZOOM_IN_KEYBIND: "Ctrl+I",
178
182
  AnchorSettings.ZOOM_OUT_KEYBIND: "Ctrl+O",
179
183
  AnchorSettings.ZOOM_TO_SELECTION_KEYBIND: "Ctrl+N",
180
- AnchorSettings.PAN_LEFT_KEYBIND: "LeftArrow",
181
- AnchorSettings.PAN_RIGHT_KEYBIND: "RightArrow",
184
+ AnchorSettings.PAN_LEFT_KEYBIND: "Left",
185
+ AnchorSettings.PAN_RIGHT_KEYBIND: "Right",
182
186
  AnchorSettings.UNDO_KEYBIND: "Ctrl+Z",
183
187
  AnchorSettings.REDO_KEYBIND: "Ctrl+Shift+Z",
184
188
  AnchorSettings.RESULTS_PER_PAGE: 100,
@@ -220,6 +224,9 @@ class AnchorSettings(QtCore.QSettings):
220
224
  AnchorSettings.TIER_TRANSCRIBED_WORDS_VISIBLE: True,
221
225
  AnchorSettings.TIER_TRANSCRIBED_PHONES_VISIBLE: True,
222
226
  AnchorSettings.THEME_PRESET: "MFA",
227
+ AnchorSettings.LANGUAGE: "unknown",
228
+ AnchorSettings.VAD_MODEL: "kaldi",
229
+ AnchorSettings.SPECTRAL_FEATURES: "spectrogram",
223
230
  AnchorSettings.PLOT_THREAD_COUNT: 10,
224
231
  }
225
232
  self.default_values.update(self.mfa_theme)
@@ -244,6 +251,27 @@ class AnchorSettings(QtCore.QSettings):
244
251
  "Transcribed phones": AnchorSettings.TIER_TRANSCRIBED_PHONES_VISIBLE,
245
252
  }
246
253
 
254
+ @property
255
+ def all_keybinds(self):
256
+ return {
257
+ QtGui.QKeySequence(self.value(x))
258
+ for x in [
259
+ self.DELETE_KEYBIND,
260
+ self.MERGE_KEYBIND,
261
+ self.PAN_LEFT_KEYBIND,
262
+ self.PAN_RIGHT_KEYBIND,
263
+ self.PLAY_KEYBIND,
264
+ self.REDO_KEYBIND,
265
+ self.UNDO_KEYBIND,
266
+ self.SAVE_KEYBIND,
267
+ self.SEARCH_KEYBIND,
268
+ self.SPLIT_KEYBIND,
269
+ self.ZOOM_IN_KEYBIND,
270
+ self.ZOOM_OUT_KEYBIND,
271
+ self.ZOOM_TO_SELECTION_KEYBIND,
272
+ ]
273
+ }
274
+
247
275
  @property
248
276
  def right_to_left(self) -> bool:
249
277
  return self.value(AnchorSettings.TIME_DIRECTION) == AnchorSettings.RTL
@@ -778,7 +806,7 @@ class AnchorSettings(QtCore.QSettings):
778
806
  border: {self.border_width}px solid {enabled_border_color};
779
807
  }}
780
808
  QCheckBox::indicator:checked {{
781
- image: url(:/icons/anchor_dark/actions/check.svg);
809
+ image: url(:/icons/anchor_light/actions/check.svg);
782
810
  }}
783
811
  QTextEdit{{
784
812
  color: {text_edit_color};
anchor/ui_main_window.py CHANGED
@@ -3,7 +3,7 @@
3
3
  ################################################################################
4
4
  ## Form generated from reading UI file 'main_window.ui'
5
5
  ##
6
- ## Created by: Qt User Interface Compiler version 6.2.2
6
+ ## Created by: Qt User Interface Compiler version 6.7.2
7
7
  ##
8
8
  ## WARNING! All changes made in this file will be lost when recompiling UI file!
9
9
  ################################################################################
@@ -77,7 +77,7 @@ class Ui_MainWindow(object):
77
77
  MainWindow.setObjectName("MainWindow")
78
78
  MainWindow.resize(1448, 974)
79
79
  icon = QIcon()
80
- icon.addFile(":/anchor-yellow.svg", QSize(), QIcon.Normal, QIcon.Off)
80
+ icon.addFile(":/anchor-yellow.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
81
81
  MainWindow.setWindowIcon(icon)
82
82
  MainWindow.setStyleSheet("")
83
83
  MainWindow.setAnimated(True)
@@ -237,18 +237,23 @@ class Ui_MainWindow(object):
237
237
  self.alignUtteranceAct.setEnabled(False)
238
238
  icon19 = QIcon(QIcon.fromTheme("edit-magic"))
239
239
  self.alignUtteranceAct.setIcon(icon19)
240
+ self.trimUtteranceAct = QAction(MainWindow)
241
+ self.trimUtteranceAct.setObjectName("trimUtteranceAct")
242
+ self.trimUtteranceAct.setEnabled(False)
243
+ icon20 = QIcon(QIcon.fromTheme("edit-scissors"))
244
+ self.trimUtteranceAct.setIcon(icon20)
240
245
  self.reloadCorpusAct = QAction(MainWindow)
241
246
  self.reloadCorpusAct.setObjectName("reloadCorpusAct")
242
247
  self.zoomToSelectionAct = QAction(MainWindow)
243
248
  self.zoomToSelectionAct.setObjectName("zoomToSelectionAct")
244
249
  self.zoomToSelectionAct.setEnabled(False)
245
- icon20 = QIcon(QIcon.fromTheme("zoom-fit-best"))
246
- self.zoomToSelectionAct.setIcon(icon20)
250
+ icon21 = QIcon(QIcon.fromTheme("zoom-fit-best"))
251
+ self.zoomToSelectionAct.setIcon(icon21)
247
252
  self.oovsOnlyAct = QAction(MainWindow)
248
253
  self.oovsOnlyAct.setObjectName("oovsOnlyAct")
249
254
  self.oovsOnlyAct.setCheckable(True)
250
- icon21 = QIcon(QIcon.fromTheme("tools-check-spelling"))
251
- self.oovsOnlyAct.setIcon(icon21)
255
+ icon22 = QIcon(QIcon.fromTheme("tools-check-spelling"))
256
+ self.oovsOnlyAct.setIcon(icon22)
252
257
  self.diarizeSpeakersAct = QAction(MainWindow)
253
258
  self.diarizeSpeakersAct.setObjectName("diarizeSpeakersAct")
254
259
  self.find_duplicates_action = QAction(MainWindow)
@@ -264,6 +269,20 @@ class Ui_MainWindow(object):
264
269
  self.openCorpusManagerAct.setObjectName("openCorpusManagerAct")
265
270
  self.verifyTranscriptsAct = QAction(MainWindow)
266
271
  self.verifyTranscriptsAct.setObjectName("verifyTranscriptsAct")
272
+ self.transcribeUtteranceAct = QAction(MainWindow)
273
+ self.transcribeUtteranceAct.setObjectName("transcribeUtteranceAct")
274
+ self.transcribeUtteranceAct.setEnabled(False)
275
+ icon23 = QIcon(QIcon.fromTheme("edit-pen"))
276
+ self.transcribeUtteranceAct.setIcon(icon23)
277
+ self.actionLoad_VAD_model = QAction(MainWindow)
278
+ self.actionLoad_VAD_model.setObjectName("actionLoad_VAD_model")
279
+ self.speechbrainVadAct = QAction(MainWindow)
280
+ self.speechbrainVadAct.setObjectName("speechbrainVadAct")
281
+ self.speechbrainVadAct.setCheckable(True)
282
+ self.speechbrainVadAct.setEnabled(False)
283
+ self.kaldiVadAct = QAction(MainWindow)
284
+ self.kaldiVadAct.setObjectName("kaldiVadAct")
285
+ self.kaldiVadAct.setCheckable(True)
267
286
  self.centralwidget = QWidget(MainWindow)
268
287
  self.centralwidget.setObjectName("centralwidget")
269
288
  self.verticalLayout_4 = QVBoxLayout(self.centralwidget)
@@ -327,12 +346,16 @@ class Ui_MainWindow(object):
327
346
  self.menuDownload_G2P_model = QMenu(self.menuModels)
328
347
  self.menuDownload_G2P_model.setObjectName("menuDownload_G2P_model")
329
348
  self.menuDownload_G2P_model.setMaximumSize(QSize(200, 400))
349
+ self.vadModelMenu = QMenu(self.menuModels)
350
+ self.vadModelMenu.setObjectName("vadModelMenu")
330
351
  self.menuAlignment = QMenu(self.menubar)
331
352
  self.menuAlignment.setObjectName("menuAlignment")
332
353
  self.menuTranscription = QMenu(self.menubar)
333
354
  self.menuTranscription.setObjectName("menuTranscription")
334
355
  self.menuExperimental = QMenu(self.menubar)
335
356
  self.menuExperimental.setObjectName("menuExperimental")
357
+ self.menuLanguage = QMenu(self.menubar)
358
+ self.menuLanguage.setObjectName("menuLanguage")
336
359
  MainWindow.setMenuBar(self.menubar)
337
360
  self.statusbar = QStatusBar(MainWindow)
338
361
  self.statusbar.setObjectName("statusbar")
@@ -347,23 +370,23 @@ class Ui_MainWindow(object):
347
370
  self.utteranceListWidget = UtteranceListWidget()
348
371
  self.utteranceListWidget.setObjectName("utteranceListWidget")
349
372
  self.utteranceDockWidget.setWidget(self.utteranceListWidget)
350
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.utteranceDockWidget)
373
+ MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.utteranceDockWidget)
351
374
  self.dictionaryDockWidget = QDockWidget(MainWindow)
352
375
  self.dictionaryDockWidget.setObjectName("dictionaryDockWidget")
353
376
  self.dictionaryWidget = DictionaryWidget()
354
377
  self.dictionaryWidget.setObjectName("dictionaryWidget")
355
378
  self.dictionaryDockWidget.setWidget(self.dictionaryWidget)
356
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.dictionaryDockWidget)
379
+ MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.dictionaryDockWidget)
357
380
  self.speakerDockWidget = QDockWidget(MainWindow)
358
381
  self.speakerDockWidget.setObjectName("speakerDockWidget")
359
382
  self.speakerWidget = SpeakerWidget()
360
383
  self.speakerWidget.setObjectName("speakerWidget")
361
384
  self.speakerDockWidget.setWidget(self.speakerWidget)
362
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.speakerDockWidget)
385
+ MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.speakerDockWidget)
363
386
  self.toolBar = QToolBar(MainWindow)
364
387
  self.toolBar.setObjectName("toolBar")
365
388
  self.toolBar.setEnabled(True)
366
- sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
389
+ sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
367
390
  sizePolicy.setHorizontalStretch(1)
368
391
  sizePolicy.setVerticalStretch(0)
369
392
  sizePolicy.setHeightForWidth(self.toolBar.sizePolicy().hasHeightForWidth())
@@ -373,25 +396,31 @@ class Ui_MainWindow(object):
373
396
  self.toolBar.setAllowedAreas(Qt.BottomToolBarArea)
374
397
  self.toolBar.setIconSize(QSize(25, 25))
375
398
  self.toolBar.setFloatable(False)
376
- MainWindow.addToolBar(Qt.BottomToolBarArea, self.toolBar)
399
+ MainWindow.addToolBar(Qt.ToolBarArea.BottomToolBarArea, self.toolBar)
377
400
  self.acousticModelDockWidget = QDockWidget(MainWindow)
378
401
  self.acousticModelDockWidget.setObjectName("acousticModelDockWidget")
379
402
  self.acousticModelWidget = AcousticModelWidget()
380
403
  self.acousticModelWidget.setObjectName("acousticModelWidget")
381
404
  self.acousticModelDockWidget.setWidget(self.acousticModelWidget)
382
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.acousticModelDockWidget)
405
+ MainWindow.addDockWidget(
406
+ Qt.DockWidgetArea.LeftDockWidgetArea, self.acousticModelDockWidget
407
+ )
383
408
  self.languageModelDockWidget = QDockWidget(MainWindow)
384
409
  self.languageModelDockWidget.setObjectName("languageModelDockWidget")
385
410
  self.languageModelWidget = LanguageModelWidget()
386
411
  self.languageModelWidget.setObjectName("languageModelWidget")
387
412
  self.languageModelDockWidget.setWidget(self.languageModelWidget)
388
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.languageModelDockWidget)
413
+ MainWindow.addDockWidget(
414
+ Qt.DockWidgetArea.LeftDockWidgetArea, self.languageModelDockWidget
415
+ )
389
416
  self.transcriptionDockWidget = QDockWidget(MainWindow)
390
417
  self.transcriptionDockWidget.setObjectName("transcriptionDockWidget")
391
418
  self.transcriptionWidget = TranscriberWidget()
392
419
  self.transcriptionWidget.setObjectName("transcriptionWidget")
393
420
  self.transcriptionDockWidget.setWidget(self.transcriptionWidget)
394
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.transcriptionDockWidget)
421
+ MainWindow.addDockWidget(
422
+ Qt.DockWidgetArea.LeftDockWidgetArea, self.transcriptionDockWidget
423
+ )
395
424
  self.alignmentDockWidget = QDockWidget(MainWindow)
396
425
  self.alignmentDockWidget.setObjectName("alignmentDockWidget")
397
426
  self.alignmentDockWidget.setEnabled(True)
@@ -399,19 +428,19 @@ class Ui_MainWindow(object):
399
428
  self.alignmentWidget = AlignmentWidget()
400
429
  self.alignmentWidget.setObjectName("alignmentWidget")
401
430
  self.alignmentDockWidget.setWidget(self.alignmentWidget)
402
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.alignmentDockWidget)
431
+ MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.alignmentDockWidget)
403
432
  self.oovDockWidget = QDockWidget(MainWindow)
404
433
  self.oovDockWidget.setObjectName("oovDockWidget")
405
434
  self.oovWidget = OovWidget()
406
435
  self.oovWidget.setObjectName("oovWidget")
407
436
  self.oovDockWidget.setWidget(self.oovWidget)
408
- MainWindow.addDockWidget(Qt.RightDockWidgetArea, self.oovDockWidget)
437
+ MainWindow.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.oovDockWidget)
409
438
  self.diarizationDockWidget = QDockWidget(MainWindow)
410
439
  self.diarizationDockWidget.setObjectName("diarizationDockWidget")
411
440
  self.diarizationWidget = DiarizationWidget()
412
441
  self.diarizationWidget.setObjectName("diarizationWidget")
413
442
  self.diarizationDockWidget.setWidget(self.diarizationWidget)
414
- MainWindow.addDockWidget(Qt.LeftDockWidgetArea, self.diarizationDockWidget)
443
+ MainWindow.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.diarizationDockWidget)
415
444
 
416
445
  self.menubar.addAction(self.menuCorpus.menuAction())
417
446
  self.menubar.addAction(self.menuEdit.menuAction())
@@ -421,6 +450,7 @@ class Ui_MainWindow(object):
421
450
  self.menubar.addAction(self.menuTranscription.menuAction())
422
451
  self.menubar.addAction(self.menuExperimental.menuAction())
423
452
  self.menubar.addAction(self.menuWindow.menuAction())
453
+ self.menubar.addAction(self.menuLanguage.menuAction())
424
454
  self.menuCorpus.addAction(self.loadCorpusAct)
425
455
  self.menuCorpus.addAction(self.loadRecentCorpusMenu.menuAction())
426
456
  self.menuCorpus.addAction(self.openCorpusManagerAct)
@@ -462,6 +492,8 @@ class Ui_MainWindow(object):
462
492
  self.menuModels.addAction(self.ivectorExtractorMenu.menuAction())
463
493
  self.menuModels.addAction(self.menuDownload_ivector_extractor.menuAction())
464
494
  self.menuModels.addAction(self.closeIvectorExtractorAct)
495
+ self.menuModels.addSeparator()
496
+ self.menuModels.addAction(self.vadModelMenu.menuAction())
465
497
  self.acousticModelMenu.addAction(self.loadAcousticModelAct)
466
498
  self.acousticModelMenu.addSeparator()
467
499
  self.g2pMenu.addAction(self.loadG2PModelAct)
@@ -474,6 +506,8 @@ class Ui_MainWindow(object):
474
506
  self.menuDownload_ivector_extractor.addSeparator()
475
507
  self.menuDownload_language_model.addSeparator()
476
508
  self.menuDownload_G2P_model.addSeparator()
509
+ self.vadModelMenu.addAction(self.speechbrainVadAct)
510
+ self.vadModelMenu.addAction(self.kaldiVadAct)
477
511
  self.menuAlignment.addAction(self.loadReferenceAlignmentsAct)
478
512
  self.menuAlignment.addAction(self.selectMappingFileAct)
479
513
  self.menuAlignment.addAction(self.evaluateAlignmentsAct)
@@ -492,6 +526,8 @@ class Ui_MainWindow(object):
492
526
  self.toolBar.addAction(self.deleteUtterancesAct)
493
527
  self.toolBar.addSeparator()
494
528
  self.toolBar.addAction(self.alignUtteranceAct)
529
+ self.toolBar.addAction(self.transcribeUtteranceAct)
530
+ self.toolBar.addAction(self.trimUtteranceAct)
495
531
  self.toolBar.addAction(self.segmentUtteranceAct)
496
532
  self.toolBar.addAction(self.lockEditAct)
497
533
  self.toolBar.addAction(self.exportFilesAct)
@@ -628,6 +664,14 @@ class Ui_MainWindow(object):
628
664
  QCoreApplication.translate("MainWindow", "Align the current utterance", None)
629
665
  )
630
666
  # endif // QT_CONFIG(tooltip)
667
+ self.trimUtteranceAct.setText(
668
+ QCoreApplication.translate("MainWindow", "Trim utterance", None)
669
+ )
670
+ # if QT_CONFIG(tooltip)
671
+ self.trimUtteranceAct.setToolTip(
672
+ QCoreApplication.translate("MainWindow", "Trim the current utterance", None)
673
+ )
674
+ # endif // QT_CONFIG(tooltip)
631
675
  self.reloadCorpusAct.setText(
632
676
  QCoreApplication.translate("MainWindow", "Reload corpus text from disk", None)
633
677
  )
@@ -673,6 +717,21 @@ class Ui_MainWindow(object):
673
717
  QCoreApplication.translate("MainWindow", "Verify transcripts", None)
674
718
  )
675
719
  # endif // QT_CONFIG(tooltip)
720
+ self.transcribeUtteranceAct.setText(
721
+ QCoreApplication.translate("MainWindow", "Transcribe utterance", None)
722
+ )
723
+ # if QT_CONFIG(tooltip)
724
+ self.transcribeUtteranceAct.setToolTip(
725
+ QCoreApplication.translate("MainWindow", "Transcribe the current utterance", None)
726
+ )
727
+ # endif // QT_CONFIG(tooltip)
728
+ self.actionLoad_VAD_model.setText(
729
+ QCoreApplication.translate("MainWindow", "Load VAD model", None)
730
+ )
731
+ self.speechbrainVadAct.setText(
732
+ QCoreApplication.translate("MainWindow", "speechbrain", None)
733
+ )
734
+ self.kaldiVadAct.setText(QCoreApplication.translate("MainWindow", "kaldi", None))
676
735
  self.menuCorpus.setTitle(QCoreApplication.translate("MainWindow", "Corpus", None))
677
736
  self.loadRecentCorpusMenu.setTitle(
678
737
  QCoreApplication.translate("MainWindow", "Load a recent corpus", None)
@@ -709,6 +768,9 @@ class Ui_MainWindow(object):
709
768
  self.menuDownload_G2P_model.setTitle(
710
769
  QCoreApplication.translate("MainWindow", "Download G2P model", None)
711
770
  )
771
+ self.vadModelMenu.setTitle(
772
+ QCoreApplication.translate("MainWindow", "Load VAD model", None)
773
+ )
712
774
  self.menuAlignment.setTitle(QCoreApplication.translate("MainWindow", "Alignment", None))
713
775
  self.menuTranscription.setTitle(
714
776
  QCoreApplication.translate("MainWindow", "Transcription", None)
@@ -716,6 +778,7 @@ class Ui_MainWindow(object):
716
778
  self.menuExperimental.setTitle(
717
779
  QCoreApplication.translate("MainWindow", "Experimental", None)
718
780
  )
781
+ self.menuLanguage.setTitle(QCoreApplication.translate("MainWindow", "Language", None))
719
782
  self.utteranceDockWidget.setWindowTitle(
720
783
  QCoreApplication.translate("MainWindow", "Utterances", None)
721
784
  )
anchor/ui_preferences.py CHANGED
@@ -3,7 +3,7 @@
3
3
  ################################################################################
4
4
  ## Form generated from reading UI file 'preferences.ui'
5
5
  ##
6
- ## Created by: Qt User Interface Compiler version 6.2.2
6
+ ## Created by: Qt User Interface Compiler version 6.7.2
7
7
  ##
8
8
  ## WARNING! All changes made in this file will be lost when recompiling UI file!
9
9
  ################################################################################
@@ -82,7 +82,7 @@ class Ui_PreferencesDialog(object):
82
82
  self.scrollArea_3.setWidgetResizable(True)
83
83
  self.scrollAreaWidgetContents_3 = QWidget()
84
84
  self.scrollAreaWidgetContents_3.setObjectName("scrollAreaWidgetContents_3")
85
- self.scrollAreaWidgetContents_3.setGeometry(QRect(0, 0, 258, 322))
85
+ self.scrollAreaWidgetContents_3.setGeometry(QRect(0, 0, 682, 353))
86
86
  self.formLayout = QFormLayout(self.scrollAreaWidgetContents_3)
87
87
  self.formLayout.setObjectName("formLayout")
88
88
  self.autosaveLabel = QLabel(self.scrollAreaWidgetContents_3)
@@ -143,40 +143,40 @@ class Ui_PreferencesDialog(object):
143
143
  self.githubTokenLabel = QLabel(self.scrollAreaWidgetContents_3)
144
144
  self.githubTokenLabel.setObjectName("githubTokenLabel")
145
145
 
146
- self.formLayout.setWidget(8, QFormLayout.LabelRole, self.githubTokenLabel)
146
+ self.formLayout.setWidget(9, QFormLayout.LabelRole, self.githubTokenLabel)
147
147
 
148
148
  self.githubTokenEdit = QLineEdit(self.scrollAreaWidgetContents_3)
149
149
  self.githubTokenEdit.setObjectName("githubTokenEdit")
150
150
 
151
- self.formLayout.setWidget(8, QFormLayout.FieldRole, self.githubTokenEdit)
151
+ self.formLayout.setWidget(9, QFormLayout.FieldRole, self.githubTokenEdit)
152
152
 
153
153
  self.resultsPerPageLabel = QLabel(self.scrollAreaWidgetContents_3)
154
154
  self.resultsPerPageLabel.setObjectName("resultsPerPageLabel")
155
155
 
156
- self.formLayout.setWidget(10, QFormLayout.LabelRole, self.resultsPerPageLabel)
156
+ self.formLayout.setWidget(11, QFormLayout.LabelRole, self.resultsPerPageLabel)
157
157
 
158
158
  self.resultsPerPageEdit = QSpinBox(self.scrollAreaWidgetContents_3)
159
159
  self.resultsPerPageEdit.setObjectName("resultsPerPageEdit")
160
160
  self.resultsPerPageEdit.setMaximum(1000)
161
161
 
162
- self.formLayout.setWidget(10, QFormLayout.FieldRole, self.resultsPerPageEdit)
162
+ self.formLayout.setWidget(11, QFormLayout.FieldRole, self.resultsPerPageEdit)
163
163
 
164
164
  self.timeDirectionLabel = QLabel(self.scrollAreaWidgetContents_3)
165
165
  self.timeDirectionLabel.setObjectName("timeDirectionLabel")
166
166
 
167
- self.formLayout.setWidget(12, QFormLayout.LabelRole, self.timeDirectionLabel)
167
+ self.formLayout.setWidget(13, QFormLayout.LabelRole, self.timeDirectionLabel)
168
168
 
169
169
  self.timeDirectionComboBox = QComboBox(self.scrollAreaWidgetContents_3)
170
170
  self.timeDirectionComboBox.addItem("")
171
171
  self.timeDirectionComboBox.addItem("")
172
172
  self.timeDirectionComboBox.setObjectName("timeDirectionComboBox")
173
173
 
174
- self.formLayout.setWidget(12, QFormLayout.FieldRole, self.timeDirectionComboBox)
174
+ self.formLayout.setWidget(13, QFormLayout.FieldRole, self.timeDirectionComboBox)
175
175
 
176
176
  self.visibleSpeakerLabel = QLabel(self.scrollAreaWidgetContents_3)
177
177
  self.visibleSpeakerLabel.setObjectName("visibleSpeakerLabel")
178
178
 
179
- self.formLayout.setWidget(13, QFormLayout.LabelRole, self.visibleSpeakerLabel)
179
+ self.formLayout.setWidget(14, QFormLayout.LabelRole, self.visibleSpeakerLabel)
180
180
 
181
181
  self.visibleSpeakerComboBox = QComboBox(self.scrollAreaWidgetContents_3)
182
182
  self.visibleSpeakerComboBox.addItem("")
@@ -186,7 +186,7 @@ class Ui_PreferencesDialog(object):
186
186
  self.visibleSpeakerComboBox.addItem("")
187
187
  self.visibleSpeakerComboBox.setObjectName("visibleSpeakerComboBox")
188
188
 
189
- self.formLayout.setWidget(13, QFormLayout.FieldRole, self.visibleSpeakerComboBox)
189
+ self.formLayout.setWidget(14, QFormLayout.FieldRole, self.visibleSpeakerComboBox)
190
190
 
191
191
  self.cudaCheckBox = QCheckBox(self.scrollAreaWidgetContents_3)
192
192
  self.cudaCheckBox.setObjectName("cudaCheckBox")
@@ -203,6 +203,16 @@ class Ui_PreferencesDialog(object):
203
203
 
204
204
  self.formLayout.setWidget(6, QFormLayout.LabelRole, self.useMpLabel)
205
205
 
206
+ self.hfTokenEdit = QLineEdit(self.scrollAreaWidgetContents_3)
207
+ self.hfTokenEdit.setObjectName("hfTokenEdit")
208
+
209
+ self.formLayout.setWidget(10, QFormLayout.FieldRole, self.hfTokenEdit)
210
+
211
+ self.hfTokenLabel = QLabel(self.scrollAreaWidgetContents_3)
212
+ self.hfTokenLabel.setObjectName("hfTokenLabel")
213
+
214
+ self.formLayout.setWidget(10, QFormLayout.LabelRole, self.hfTokenLabel)
215
+
206
216
  self.scrollArea_3.setWidget(self.scrollAreaWidgetContents_3)
207
217
 
208
218
  self.verticalLayout_8.addWidget(self.scrollArea_3)
@@ -436,7 +446,7 @@ class Ui_PreferencesDialog(object):
436
446
  self.scrollArea_2.setWidgetResizable(True)
437
447
  self.scrollAreaWidgetContents_2 = QWidget()
438
448
  self.scrollAreaWidgetContents_2.setObjectName("scrollAreaWidgetContents_2")
439
- self.scrollAreaWidgetContents_2.setGeometry(QRect(0, 0, 173, 410))
449
+ self.scrollAreaWidgetContents_2.setGeometry(QRect(0, 0, 668, 410))
440
450
  self.verticalLayout_7 = QVBoxLayout(self.scrollAreaWidgetContents_2)
441
451
  self.verticalLayout_7.setObjectName("verticalLayout_7")
442
452
  self.formLayout_2 = QFormLayout()
@@ -587,7 +597,7 @@ class Ui_PreferencesDialog(object):
587
597
  self.scrollArea_4.setWidgetResizable(True)
588
598
  self.scrollAreaWidgetContents_4 = QWidget()
589
599
  self.scrollAreaWidgetContents_4.setObjectName("scrollAreaWidgetContents_4")
590
- self.scrollAreaWidgetContents_4.setGeometry(QRect(0, 0, 231, 228))
600
+ self.scrollAreaWidgetContents_4.setGeometry(QRect(0, 0, 682, 353))
591
601
  self.verticalLayout_11 = QVBoxLayout(self.scrollAreaWidgetContents_4)
592
602
  self.verticalLayout_11.setObjectName("verticalLayout_11")
593
603
  self.formLayout_6 = QFormLayout()
@@ -684,7 +694,7 @@ class Ui_PreferencesDialog(object):
684
694
  self.scrollArea_5.setWidgetResizable(True)
685
695
  self.scrollAreaWidgetContents_5 = QWidget()
686
696
  self.scrollAreaWidgetContents_5.setObjectName("scrollAreaWidgetContents_5")
687
- self.scrollAreaWidgetContents_5.setGeometry(QRect(0, 0, 223, 250))
697
+ self.scrollAreaWidgetContents_5.setGeometry(QRect(0, 0, 682, 353))
688
698
  self.verticalLayout_13 = QVBoxLayout(self.scrollAreaWidgetContents_5)
689
699
  self.verticalLayout_13.setObjectName("verticalLayout_13")
690
700
  self.formLayout_7 = QFormLayout()
@@ -796,7 +806,7 @@ class Ui_PreferencesDialog(object):
796
806
  self.buttonBox.accepted.connect(PreferencesDialog.accept)
797
807
  self.buttonBox.rejected.connect(PreferencesDialog.reject)
798
808
 
799
- self.tabWidget.setCurrentIndex(1)
809
+ self.tabWidget.setCurrentIndex(3)
800
810
  self.visibleSpeakerComboBox.setCurrentIndex(1)
801
811
 
802
812
  QMetaObject.connectSlotsByName(PreferencesDialog)
@@ -866,6 +876,9 @@ class Ui_PreferencesDialog(object):
866
876
  self.useMpLabel.setText(
867
877
  QCoreApplication.translate("PreferencesDialog", "Use multiprocessing?", None)
868
878
  )
879
+ self.hfTokenLabel.setText(
880
+ QCoreApplication.translate("PreferencesDialog", "HuggingFace request token", None)
881
+ )
869
882
  self.tabWidget.setTabText(
870
883
  self.tabWidget.indexOf(self.generalTab),
871
884
  QCoreApplication.translate("PreferencesDialog", "General", None),
anchor/undo.py CHANGED
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import collections
4
4
  import typing
5
+ import unicodedata
5
6
 
6
7
  import pynini.lib
7
8
  import sqlalchemy
@@ -427,18 +428,23 @@ class UpdateUtteranceTextCommand(FileCommand):
427
428
  "UpdateUtteranceTextCommand", "Update utterance text"
428
429
  )
429
430
  )
430
- self.tokenizer = self.corpus_model.corpus.get_tokenizer(
431
- self.corpus_model.corpus.get_dict_id_for_speaker(
432
- self.corpus_model.get_speaker_name(self.speaker_id)
431
+ try:
432
+ self.tokenizer = self.corpus_model.corpus.get_tokenizer(
433
+ self.corpus_model.corpus.get_dict_id_for_speaker(
434
+ self.corpus_model.get_speaker_name(self.speaker_id)
435
+ )
433
436
  )
434
- )
437
+ except (AttributeError, KeyError):
438
+ self.tokenizer = None
435
439
 
436
440
  def _process_text(self, session, text: str):
437
441
  self.utterance.text = text
438
- normalized_text, normalized_character_text, oovs = self.tokenizer(text)
439
- self.utterance.normalized_text = normalized_text
440
- self.utterance.normalized_character_text = normalized_character_text
441
- self.utterance.oovs = " ".join(oovs)
442
+ if self.tokenizer is not None:
443
+ text = unicodedata.normalize("NFKC", text)
444
+ normalized_text, normalized_character_text, oovs = self.tokenizer(text)
445
+ self.utterance.normalized_text = normalized_text
446
+ self.utterance.normalized_character_text = normalized_character_text
447
+ self.utterance.oovs = " ".join(oovs)
442
448
  self.utterance.ignored = not text
443
449
  session.merge(self.utterance)
444
450
 
@@ -751,7 +757,7 @@ class AddPronunciationCommand(DictionaryCommand):
751
757
  if not self.pronunciation:
752
758
  if dictionary_model.g2p_generator is not None:
753
759
  try:
754
- self.pronunciation = dictionary_model.g2p_generator.rewriter(word)[0]
760
+ self.pronunciation = dictionary_model.g2p_generator.rewriter(word)[0][0]
755
761
  except (pynini.lib.rewrite.Error, IndexError):
756
762
  self.pronunciation = self.oov_phone
757
763
  else:
anchor/widgets.py CHANGED
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import logging
3
4
  import os
4
5
  import re
5
6
  import time
@@ -19,6 +20,7 @@ from montreal_forced_aligner.data import ( # noqa
19
20
  WordType,
20
21
  )
21
22
  from montreal_forced_aligner.db import Corpus, Phone, Speaker, Utterance # noqa
23
+ from montreal_forced_aligner.models import AcousticModel, Archive
22
24
  from montreal_forced_aligner.utils import DatasetType, inspect_database, mfa_open # noqa
23
25
  from PySide6 import QtCore, QtGui, QtMultimedia, QtSvgWidgets, QtWidgets
24
26
 
@@ -52,6 +54,8 @@ if TYPE_CHECKING:
52
54
  outside_column_ratio = 0.2
53
55
  outside_column_minimum = 250
54
56
 
57
+ logger = logging.getLogger("anchor")
58
+
55
59
 
56
60
  class ErrorButtonBox(QtWidgets.QDialogButtonBox):
57
61
  def __init__(self, *args, **kwargs):
@@ -101,8 +105,8 @@ class MediaPlayer(QtMultimedia.QMediaPlayer): # pragma: no cover
101
105
  self.audioOutput().setMuted(muted)
102
106
 
103
107
  def handle_error(self, *args):
104
- print("ERROR")
105
- print(args)
108
+ logger.info("ERROR")
109
+ logger.info(args)
106
110
 
107
111
  def play(self) -> None:
108
112
  if self.startTime() is None:
@@ -373,6 +377,8 @@ class BaseTableView(QtWidgets.QTableView):
373
377
  current = self.selectionModel().currentIndex()
374
378
  text = self.selectionModel().model().data(current, QtCore.Qt.ItemDataRole.DisplayRole)
375
379
  clipboard.setText(str(text))
380
+ elif QtGui.QKeySequence(event.keyCombination()) not in self.settings.all_keybinds:
381
+ super().keyPressEvent(event)
376
382
 
377
383
  def setModel(self, model: QtCore.QAbstractItemModel) -> None:
378
384
  super().setModel(model)
@@ -729,25 +735,20 @@ class UtteranceListWidget(QtWidgets.QWidget): # pragma: no cover
729
735
 
730
736
  def search(self):
731
737
  self.selection_model.clearSelection()
732
- new_query = (
733
- self.search_box.query,
734
- self.file_dropdown.current_text(),
735
- self.speaker_dropdown.current_text(),
736
- self.oov_button.isChecked(),
737
- )
738
- if new_query != self.cached_query:
739
- self.pagination_toolbar.reset()
740
- self.corpus_model.current_offset = 0
738
+ query = self.search_box.query()
739
+ query.graphemes = self.corpus_model.dictionary_model.graphemes
740
+ self.pagination_toolbar.reset()
741
+ self.corpus_model.current_offset = 0
741
742
  self.corpus_model.search(
742
- self.search_box.query(),
743
+ query,
743
744
  self.file_dropdown.current_text(),
744
745
  self.speaker_dropdown.current_text(),
745
746
  oovs=self.oov_button.isChecked(),
746
747
  )
747
- self.corpus_model.set_text_filter(self.search_box.query())
748
748
 
749
749
  def replace(self):
750
750
  search_query = self.search_box.query()
751
+ search_query.graphemes = self.corpus_model.dictionary_model.graphemes
751
752
  if not search_query.text:
752
753
  return
753
754
  replacement = self.replace_box.text()
@@ -2360,7 +2361,7 @@ class ModelInfoWidget(QtWidgets.QWidget):
2360
2361
 
2361
2362
  def refresh(self):
2362
2363
  self.tree.clear()
2363
- if self.model is not None:
2364
+ if self.model is not None and isinstance(self.model, Archive):
2364
2365
  self.label.setText(self.model.name)
2365
2366
  self.path_label.setText(str(self.model.source))
2366
2367
  meta = self.model.meta
@@ -2474,7 +2475,7 @@ class TranscriberWidget(QtWidgets.QWidget):
2474
2475
  else:
2475
2476
  validate_enabled = False
2476
2477
  self.dictionary_label.setText("Not loaded")
2477
- if self.corpus_model.acoustic_model is not None:
2478
+ if isinstance(self.corpus_model.acoustic_model, AcousticModel):
2478
2479
  self.acoustic_model_label.setText(self.corpus_model.acoustic_model.name)
2479
2480
  else:
2480
2481
  validate_enabled = False
@@ -2998,7 +2999,7 @@ class AlignmentWidget(QtWidgets.QWidget):
2998
2999
  else:
2999
3000
  validate_enabled = False
3000
3001
  self.dictionary_label.setText("Not loaded")
3001
- if self.corpus_model.acoustic_model is not None:
3002
+ if isinstance(self.corpus_model.acoustic_model, AcousticModel):
3002
3003
  self.acoustic_model_label.setText(self.corpus_model.acoustic_model.name)
3003
3004
  else:
3004
3005
  validate_enabled = False