feat: aprimorado o preview de falantes na tela Refinar para reprod
- aprimorado o preview de falantes na tela Refinar para reproduzir os trechos do vídeo - corrigida a leitura dos timestamps do preview de falantes usando os clipes do banco - alterado o preview de falantes para reproduzir diretamente na timeline ativa do Premiere - evitadas reinicializações concorrentes durante o monitoramento do preview na timeline Resumo: - 2 arquivos alterados - 0 novos - 2 modificados - 0 removidos 2 files changed, 49 insertions(+), 24 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/main.js
This commit is contained in:
Binary file not shown.
+37
-12
@@ -3072,13 +3072,16 @@ function stopSpeakerAudio() {
|
|||||||
}
|
}
|
||||||
speakerAudioPlayer = null;
|
speakerAudioPlayer = null;
|
||||||
speakerAudioQueue = null;
|
speakerAudioQueue = null;
|
||||||
|
var haviaPreviewNaTimeline = !!speakerTimelineQueue;
|
||||||
speakerTimelineToken += 1;
|
speakerTimelineToken += 1;
|
||||||
if (speakerTimelinePoll) {
|
if (speakerTimelinePoll) {
|
||||||
clearInterval(speakerTimelinePoll);
|
clearTimeout(speakerTimelinePoll);
|
||||||
speakerTimelinePoll = null;
|
speakerTimelinePoll = null;
|
||||||
}
|
}
|
||||||
speakerTimelineQueue = null;
|
speakerTimelineQueue = null;
|
||||||
|
if (haviaPreviewNaTimeline) {
|
||||||
cs.evalScript("(function(){try{if(typeof qe!==\"undefined\"&&qe.stopPlayback)qe.stopPlayback();return \"ok\";}catch(e){return \"erro:\"+String(e);}}())", function () {});
|
cs.evalScript("(function(){try{if(typeof qe!==\"undefined\"&&qe.stopPlayback)qe.stopPlayback();return \"ok\";}catch(e){return \"erro:\"+String(e);}}())", function () {});
|
||||||
|
}
|
||||||
var videoPreview = document.getElementById("refinarSpeakerPreview");
|
var videoPreview = document.getElementById("refinarSpeakerPreview");
|
||||||
if (videoPreview) videoPreview.hidden = true;
|
if (videoPreview) videoPreview.hidden = true;
|
||||||
document.querySelectorAll(".speaker-play-button").forEach(function (button) {
|
document.querySelectorAll(".speaker-play-button").forEach(function (button) {
|
||||||
@@ -3106,7 +3109,14 @@ function toggleSpeakerTimeline(speakerId, button) {
|
|||||||
showToast("err", "Preview de vídeo indisponível nesta versão do painel.");
|
showToast("err", "Preview de vídeo indisponível nesta versão do painel.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
speakerTimelineQueue = { speakerId: speakerId, ranges: ranges, index: 0, button: button };
|
speakerTimelineQueue = {
|
||||||
|
speakerId: speakerId,
|
||||||
|
ranges: ranges,
|
||||||
|
index: 0,
|
||||||
|
button: button,
|
||||||
|
inicioPendente: false,
|
||||||
|
consultaPendente: false,
|
||||||
|
};
|
||||||
preview.hidden = false;
|
preview.hidden = false;
|
||||||
if (info) info.textContent = "Reproduzindo os trechos de " + speakerId + ".";
|
if (info) info.textContent = "Reproduzindo os trechos de " + speakerId + ".";
|
||||||
button.textContent = "■ timeline";
|
button.textContent = "■ timeline";
|
||||||
@@ -3116,10 +3126,13 @@ function toggleSpeakerTimeline(speakerId, button) {
|
|||||||
|
|
||||||
function iniciarPreviewNaTimeline(token) {
|
function iniciarPreviewNaTimeline(token) {
|
||||||
if (!speakerTimelineQueue || token !== speakerTimelineToken) return;
|
if (!speakerTimelineQueue || token !== speakerTimelineToken) return;
|
||||||
var range = speakerTimelineQueue.ranges[speakerTimelineQueue.index];
|
var indiceDoTrecho = speakerTimelineQueue.index;
|
||||||
|
if (speakerTimelineQueue.inicioPendente) return;
|
||||||
|
var range = speakerTimelineQueue.ranges[indiceDoTrecho];
|
||||||
if (!range) { stopSpeakerAudio(); return; }
|
if (!range) { stopSpeakerAudio(); return; }
|
||||||
var inicio = Math.max(0, Number(range.start) - 0.15);
|
var inicio = Math.max(0, Number(range.start) - 0.15);
|
||||||
var inicioJson = JSON.stringify(inicio);
|
var inicioJson = JSON.stringify(inicio);
|
||||||
|
speakerTimelineQueue.inicioPendente = true;
|
||||||
cs.evalScript(
|
cs.evalScript(
|
||||||
"(function(){try{" +
|
"(function(){try{" +
|
||||||
"var seq=app.project.activeSequence;" +
|
"var seq=app.project.activeSequence;" +
|
||||||
@@ -3130,7 +3143,8 @@ function iniciarPreviewNaTimeline(token) {
|
|||||||
"return JSON.stringify({ok:true});" +
|
"return JSON.stringify({ok:true});" +
|
||||||
"}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())",
|
"}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())",
|
||||||
function (raw) {
|
function (raw) {
|
||||||
if (!speakerTimelineQueue || token !== speakerTimelineToken) return;
|
if (!speakerTimelineQueue || token !== speakerTimelineToken || speakerTimelineQueue.index !== indiceDoTrecho) return;
|
||||||
|
speakerTimelineQueue.inicioPendente = false;
|
||||||
var resultado;
|
var resultado;
|
||||||
try { resultado = JSON.parse(raw); } catch (_) { resultado = { ok: false, error: "Resposta inválida do Premiere." }; }
|
try { resultado = JSON.parse(raw); } catch (_) { resultado = { ok: false, error: "Resposta inválida do Premiere." }; }
|
||||||
if (!resultado.ok) {
|
if (!resultado.ok) {
|
||||||
@@ -3144,27 +3158,38 @@ function iniciarPreviewNaTimeline(token) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function monitorarPreviewNaTimeline(token) {
|
function monitorarPreviewNaTimeline(token) {
|
||||||
if (speakerTimelinePoll) clearInterval(speakerTimelinePoll);
|
if (!speakerTimelineQueue || token !== speakerTimelineToken || speakerTimelineQueue.consultaPendente) return;
|
||||||
speakerTimelinePoll = setInterval(function () {
|
var indiceDoTrecho = speakerTimelineQueue.index;
|
||||||
if (!speakerTimelineQueue || token !== speakerTimelineToken) return;
|
var range = speakerTimelineQueue.ranges[indiceDoTrecho];
|
||||||
var range = speakerTimelineQueue.ranges[speakerTimelineQueue.index];
|
if (!range) { stopSpeakerAudio(); return; }
|
||||||
|
speakerTimelineQueue.consultaPendente = true;
|
||||||
cs.evalScript(
|
cs.evalScript(
|
||||||
"(function(){try{var seq=app.project.activeSequence;return JSON.stringify({ok:!!seq,position:seq?Number(seq.getPlayerPosition().ticks)/254016000000:0});}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())",
|
"(function(){try{var seq=app.project.activeSequence;return JSON.stringify({ok:!!seq,position:seq?Number(seq.getPlayerPosition().ticks)/254016000000:0});}catch(e){return JSON.stringify({ok:false,error:String(e)});}}())",
|
||||||
function (raw) {
|
function (raw) {
|
||||||
if (!speakerTimelineQueue || token !== speakerTimelineToken) return;
|
if (!speakerTimelineQueue || token !== speakerTimelineToken || speakerTimelineQueue.index !== indiceDoTrecho) return;
|
||||||
|
speakerTimelineQueue.consultaPendente = false;
|
||||||
var resultado;
|
var resultado;
|
||||||
try { resultado = JSON.parse(raw); } catch (_) { return; }
|
try { resultado = JSON.parse(raw); } catch (_) { resultado = { ok: false, error: "Resposta inválida do Premiere." }; }
|
||||||
if (!resultado.ok || Number(resultado.position) >= Number(range.end)) {
|
if (!resultado.ok) {
|
||||||
|
stopSpeakerAudio();
|
||||||
|
showToast("err", resultado.error || "Não foi possível consultar o playhead da timeline.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (Number(resultado.position) >= Number(range.end)) {
|
||||||
speakerTimelineQueue.index += 1;
|
speakerTimelineQueue.index += 1;
|
||||||
if (speakerTimelineQueue.index >= speakerTimelineQueue.ranges.length) {
|
if (speakerTimelineQueue.index >= speakerTimelineQueue.ranges.length) {
|
||||||
stopSpeakerAudio();
|
stopSpeakerAudio();
|
||||||
} else {
|
} else {
|
||||||
iniciarPreviewNaTimeline(token);
|
iniciarPreviewNaTimeline(token);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
speakerTimelinePoll = setTimeout(function () {
|
||||||
|
speakerTimelinePoll = null;
|
||||||
|
monitorarPreviewNaTimeline(token);
|
||||||
|
}, 250);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}, 120);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleSpeakerAudio(speakerId, button) {
|
function toggleSpeakerAudio(speakerId, button) {
|
||||||
|
|||||||
Reference in New Issue
Block a user