feat: adicionada opção para calcular métricas de voz automaticamen

- adicionada opção para calcular métricas de voz automaticamente após a transcrição
- reorganizada a etapa opcional para revisar falantes e métricas processados automaticamente

Resumo:
- 2 arquivos alterados
- 0 novos
- 2 modificados
- 0 removidos

 2 files changed, 24 insertions(+), 8 deletions(-)

Arquivos:
  - code/cep-plugin/index.html
  - code/cep-plugin/main.js
This commit is contained in:
João Henrique
2026-09-09 10:28:07 -04:00
parent f3e8650a1a
commit f02f4f3e60
2 changed files with 24 additions and 8 deletions
+9 -4
View File
@@ -138,6 +138,11 @@
<span>Detectar quem fala logo após transcrever</span>
</label>
<label class="checkbox-field">
<input type="checkbox" id="silenceVoiceFeaturesAuto">
<span>Calcular métricas de voz logo após transcrever</span>
</label>
<div class="speaker-config" id="silenceSpeakerConfig" hidden>
<div class="speaker-config-head">
<strong>Falantes detectados</strong>
@@ -170,8 +175,8 @@
<div class="step-head">
<span class="step-number" aria-hidden="true">3</span>
<div class="step-title">
<h2>Enriquecer a transcrição <span class="badge-optional">opcional</span></h2>
<p>Dados extras que deixam o corte por IA mais preciso.</p>
<h2>Revisar falantes e áudio <span class="badge-optional">opcional</span></h2>
<p>Confira os resultados processados e ajuste os dados antes de gerar o JSON.</p>
</div>
<span class="step-chip" id="step3Chip">Bloqueado</span>
</div>
@@ -181,14 +186,14 @@
<strong>Detecção de falantes</strong>
<span id="silenceDiarizeInfo">Separa os falantes por trecho. Precisa do token Hugging Face.</span>
</div>
<button id="btnDiarize" class="button" onclick="silenceDiarizeSpeakers()" type="button" disabled>Detectar</button>
<button id="btnDiarize" class="button" onclick="silenceDiarizeSpeakers()" type="button" disabled>Refazer</button>
</div>
<div class="mini-action">
<div>
<strong>Métricas de voz</strong>
<span id="silenceVoiceFeaturesInfo">Pitch, energia, velocidade de fala e pausas de cada trecho.</span>
</div>
<button id="btnVoiceFeatures" class="button" onclick="silenceComputeVoiceFeatures()" type="button" disabled>Calcular</button>
<button id="btnVoiceFeatures" class="button" onclick="silenceComputeVoiceFeatures()" type="button" disabled>Refazer</button>
</div>
</div>
</section>
+15 -4
View File
@@ -1786,15 +1786,25 @@ function silenceTranscribe() {
}
taskEnd(true, "Transcrição pronta: " + resumo);
unlockAfterTranscript();
if (document.getElementById("silenceDiarize").checked) {
silenceDiarizeSpeakers();
}
silenceRunAutomaticEnrichments();
},
hfSpawnOptions()
);
}
function silenceDiarizeSpeakers() {
function silenceRunAutomaticEnrichments() {
var shouldDiarize = document.getElementById("silenceDiarize").checked && !!loadHfToken();
var shouldMeasureVoice = document.getElementById("silenceVoiceFeaturesAuto").checked;
if (shouldDiarize) {
silenceDiarizeSpeakers(function () {
if (shouldMeasureVoice) silenceComputeVoiceFeatures();
});
} else if (shouldMeasureVoice) {
silenceComputeVoiceFeatures();
}
}
function silenceDiarizeSpeakers(onFinished) {
if (!silenceState.transcriptPath) return;
if (!silenceState.mediaPath) {
silenceLog("Detecte o clipe/sequência primeiro (passo 1) para saber qual vídeo diarizar.", "err");
@@ -1843,6 +1853,7 @@ function silenceDiarizeSpeakers() {
setStep(3, "done", "Enriquecido");
taskEnd(true, msg);
syncTranscriptToCache();
if (typeof onFinished === "function") onFinished();
},
hfSpawnOptions()
);