Add multi-speaker support for group conversations
Features: - Speaker management system with unique IDs and colors - Visual speaker selection with avatars and color coding - Automatic language detection per speaker - Real-time translation for all speakers' languages - Conversation history with speaker attribution - Export conversation as text file - Persistent speaker data in localStorage UI Components: - Speaker toolbar with add/remove controls - Active speaker indicators - Conversation view with color-coded messages - Settings toggle for multi-speaker mode - Mobile-responsive speaker buttons Technical Implementation: - SpeakerManager class handles all speaker operations - Automatic translation to all active languages - Conversation entries with timestamps - Translation caching per language - Clean separation of original vs translated text - Support for up to 8 concurrent speakers User Experience: - Click to switch active speaker - Visual feedback for active speaker - Conversation flows naturally with colors - Export feature for meeting minutes - Clear conversation history option - Seamless single/multi speaker mode switching This enables group conversations where each participant can speak in their native language and see translations in real-time. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -124,6 +124,25 @@
|
||||
<div class="container">
|
||||
<h1 class="text-center mb-4">Voice Language Translator</h1>
|
||||
<!--<p class="text-center text-muted">Powered by Gemma 3, Whisper & Edge TTS</p>-->
|
||||
|
||||
<!-- Multi-speaker toolbar -->
|
||||
<div id="speakerToolbar" class="card mb-3" style="display: none;">
|
||||
<div class="card-body p-2">
|
||||
<div class="d-flex align-items-center justify-content-between flex-wrap">
|
||||
<div class="d-flex align-items-center gap-2 mb-2 mb-md-0">
|
||||
<button id="addSpeakerBtn" class="btn btn-sm btn-outline-primary">
|
||||
<i class="fas fa-user-plus"></i> Add Speaker
|
||||
</button>
|
||||
<button id="toggleMultiSpeaker" class="btn btn-sm btn-secondary">
|
||||
<i class="fas fa-users"></i> Multi-Speaker: <span id="multiSpeakerStatus">OFF</span>
|
||||
</button>
|
||||
</div>
|
||||
<div id="speakerList" class="d-flex gap-2 flex-wrap">
|
||||
<!-- Speaker buttons will be added here dynamically -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-3">
|
||||
@@ -205,6 +224,26 @@
|
||||
<div id="progressBar" class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Multi-speaker conversation view -->
|
||||
<div id="conversationView" class="card mt-4" style="display: none;">
|
||||
<div class="card-header bg-info text-white d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0">Conversation</h5>
|
||||
<div>
|
||||
<button id="exportConversation" class="btn btn-sm btn-light">
|
||||
<i class="fas fa-download"></i> Export
|
||||
</button>
|
||||
<button id="clearConversation" class="btn btn-sm btn-light">
|
||||
<i class="fas fa-trash"></i> Clear
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body" style="max-height: 400px; overflow-y: auto;">
|
||||
<div id="conversationContent">
|
||||
<!-- Conversation entries will be added here -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<audio id="audioPlayer" style="display: none;"></audio>
|
||||
|
||||
@@ -305,6 +344,13 @@
|
||||
<small class="text-muted d-block">Shows translation as it's generated for faster feedback</small>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check form-switch mb-3">
|
||||
<input class="form-check-input" type="checkbox" id="multiSpeakerMode">
|
||||
<label class="form-check-label" for="multiSpeakerMode">
|
||||
Enable multi-speaker mode
|
||||
<small class="text-muted d-block">Track multiple speakers in conversations</small>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
|
Reference in New Issue
Block a user