diff --git a/app.js b/app.js index c74eff6..bf34e4f 100644 --- a/app.js +++ b/app.js @@ -44,11 +44,21 @@ if (CONFIG.speaker_merges) { }); } +// Build speaker hide set for O(1) lookups +const speakerHideSet = new Set(CONFIG.speaker_hide || []); + // Resolve speaker ID through merge map function resolveSpeaker(speakerId) { return speakerMergeMap.get(speakerId) || speakerId; } +// Check if speaker should be hidden (checks both raw and resolved ID) +function isSpeakerHidden(speakerId) { + if (!speakerId) return false; + const resolved = resolveSpeaker(speakerId); + return speakerHideSet.has(speakerId) || speakerHideSet.has(resolved); +} + // Set audio source from config audio.src = CONFIG.audio_path; @@ -130,10 +140,13 @@ function buildIntervals(segments) { const raw = []; segments.forEach((segment) => { const segmentSpeaker = resolveSpeaker(segment.speaker || null); + // Skip hidden speakers at segment level + if (isSpeakerHidden(segmentSpeaker)) return; if (Array.isArray(segment.words) && segment.words.length) { segment.words.forEach((word) => { const speaker = resolveSpeaker(word.speaker || segmentSpeaker); - if (!speaker || word.start == null || word.end == null) return; + // Skip hidden speakers at word level + if (!speaker || word.start == null || word.end == null || isSpeakerHidden(speaker)) return; raw.push({ start: word.start, end: word.end, speaker }); }); return; @@ -886,12 +899,14 @@ async function init() { const response = await fetch(transcriptPath); const transcript = await response.json(); state.intervals = buildIntervals(transcript.segments || []); - state.segments = (transcript.segments || []).map((segment) => ({ - start: segment.start, - end: segment.end, - text: segment.text || "", - speaker: segment.speaker, - })); + state.segments = (transcript.segments || []) + .filter((segment) => !isSpeakerHidden(segment.speaker)) + .map((segment) => ({ + start: segment.start, + end: segment.end, + text: segment.text || "", + speaker: segment.speaker, + })); const { speakers, speakerMap } = buildSpeakers(state.intervals); state.speakers = speakers; state.speakerMap = speakerMap; diff --git a/config.js b/config.js index 8bb018a..8a41651 100644 --- a/config.js +++ b/config.js @@ -51,6 +51,11 @@ const CONFIG = { "SPEAKER_00": ["SPEAKER_03"], "SPEAKER_22": ["SPEAKER_21"], }, + + // Noisy talkers to hide from transcript and visualization + speaker_hide: [ + "SPEAKER_13","SPEAKER_15" + ], // =================== // TRANSCRIPT DEFAULTS