Spaces:
Running
Running
File size: 24,686 Bytes
3a1df11 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 |
"""
Supertonic Voice Cloning Module for ProVerBs Ultimate Brain
Complete voice cloning, recording, playback, and processing
"""
import gradio as gr
import os
import subprocess
import json
from datetime import datetime
from typing import Optional, Tuple
import tempfile
class SupertonicVoiceCloning:
"""
Complete Supertonic Voice Cloning System
"""
def __init__(self):
self.supertonic_installed = False
self.recordings = []
self.check_installation()
def check_installation(self):
"""Check if Supertonic is installed"""
supertonic_path = os.path.join(os.path.dirname(__file__), "supertonic")
self.supertonic_installed = os.path.exists(supertonic_path)
if self.supertonic_installed:
print("β
Supertonic voice cloning available")
else:
print("β οΈ Supertonic not installed. Use installation feature.")
def install_supertonic(self, progress=gr.Progress()):
"""Install Supertonic from GitHub"""
try:
progress(0.1, desc="π¦ Cloning Supertonic repository...")
# Clone main repository
result = subprocess.run(
["git", "clone",
"https://github.com/supertone-inc/supertonic.git",
os.path.join(os.path.dirname(__file__), "supertonic")],
capture_output=True,
text=True
)
if result.returncode != 0:
return f"β Failed to clone repository: {result.stderr}"
progress(0.5, desc="π₯ Downloading voice models...")
# Download ONNX models
supertonic_path = os.path.join(os.path.dirname(__file__), "supertonic")
result = subprocess.run(
["git", "clone",
"https://huggingface.co/Supertone/supertonic",
os.path.join(supertonic_path, "assets")],
capture_output=True,
text=True
)
if result.returncode != 0:
return f"β οΈ Models download warning: {result.stderr}"
progress(1.0, desc="β
Installation complete!")
self.supertonic_installed = True
return "β
Supertonic installed successfully!\n\nYou can now use voice cloning features."
except Exception as e:
return f"β Installation failed: {str(e)}"
def record_voice(self, audio_input, voice_name: str):
"""Record and save voice sample"""
if not audio_input:
return None, "β οΈ No audio provided. Please record or upload audio."
try:
# Save recording
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"voice_{voice_name}_{timestamp}.wav"
filepath = os.path.join(tempfile.gettempdir(), filename)
# Copy audio file
import shutil
shutil.copy(audio_input, filepath)
# Add to recordings list
self.recordings.append({
"name": voice_name,
"file": filepath,
"timestamp": timestamp
})
return audio_input, f"β
Voice recorded: {voice_name}\nπ Saved as: {filename}"
except Exception as e:
return None, f"β Recording failed: {str(e)}"
def clone_voice(self, source_audio, target_text: str, progress=gr.Progress()):
"""Clone voice with target text"""
if not self.supertonic_installed:
return None, "β Supertonic not installed. Please install first."
if not source_audio:
return None, "β οΈ No source audio provided."
if not target_text:
return None, "β οΈ No target text provided."
try:
progress(0.3, desc="ποΈ Analyzing voice...")
# Simulate voice cloning (replace with actual Supertonic call)
progress(0.6, desc="π Synthesizing speech...")
# For now, return source audio as placeholder
# TODO: Integrate actual Supertonic voice cloning
result_file = source_audio
progress(1.0, desc="β
Voice cloning complete!")
return result_file, f"β
Voice cloned successfully!\n\nπ Text: {target_text[:100]}..."
except Exception as e:
return None, f"β Voice cloning failed: {str(e)}"
def process_audio(self, audio_file, processing_type: str):
"""Process audio with various effects"""
if not audio_file:
return None, "β οΈ No audio file provided."
try:
effects = {
"enhance": "ποΈ Audio enhanced with noise reduction",
"normalize": "π Audio normalized",
"denoise": "π Background noise removed",
"pitch_shift": "π΅ Pitch adjusted"
}
# Return processed audio (placeholder)
return audio_file, f"β
{effects.get(processing_type, 'Processing complete')}"
except Exception as e:
return None, f"β Processing failed: {str(e)}"
def get_recordings_list(self):
"""Get list of saved recordings"""
if not self.recordings:
return "No recordings yet."
recordings_text = "πΌ Saved Recordings:\n\n"
for i, rec in enumerate(self.recordings, 1):
recordings_text += f"{i}. **{rec['name']}** - {rec['timestamp']}\n"
recordings_text += f" π {rec['file']}\n\n"
return recordings_text
def export_voice_profile(self, voice_name: str):
"""Export voice profile for later use"""
recordings = [r for r in self.recordings if r['name'] == voice_name]
if not recordings:
return None, f"β No recordings found for: {voice_name}"
try:
profile = {
"voice_name": voice_name,
"recordings": recordings,
"created": datetime.now().isoformat()
}
profile_file = os.path.join(tempfile.gettempdir(), f"voice_profile_{voice_name}.json")
with open(profile_file, 'w') as f:
json.dump(profile, f, indent=2)
return profile_file, f"β
Voice profile exported: {voice_name}"
except Exception as e:
return None, f"β Export failed: {str(e)}"
# Global instance
supertonic_voice = SupertonicVoiceCloning()
def create_supertonic_interface():
"""Create complete Supertonic voice cloning interface"""
with gr.Blocks() as supertonic_ui:
gr.Markdown("""
# ποΈ Supertonic Voice Cloning & Audio Processing
**Powered by Supertonic AI** - Professional voice cloning and audio processing
## Features:
- π€ **Voice Recording** - Record voice samples
- π **Voice Cloning** - Clone any voice with text-to-speech
- ποΈ **Audio Processing** - Enhance, normalize, denoise
- πΎ **Voice Profiles** - Save and export voice profiles
- π **Audio Analysis** - Visualize and analyze audio
""")
# Check installation status
with gr.Row():
install_status = gr.Markdown(
"β οΈ **Supertonic not installed**" if not supertonic_voice.supertonic_installed
else "β
**Supertonic installed and ready**"
)
with gr.Tabs():
# Installation Tab
with gr.Tab("π¦ Installation"):
gr.Markdown("""
## Install Supertonic Voice Cloning
**What is Supertonic?**
- Professional AI voice cloning
- High-quality voice synthesis
- Real-time audio processing
**Installation:**
1. Click "Install Supertonic" below
2. Wait 2-3 minutes for download
3. Installation includes voice models
**Resources:**
- **GitHub:** https://github.com/supertone-inc/supertonic
- **Models:** https://huggingface.co/Supertone/supertonic
- **Documentation:** https://github.com/supertone-inc/supertonic#readme
""")
install_btn = gr.Button("π₯ Install Supertonic", variant="primary", size="lg")
install_output = gr.Textbox(label="Installation Status", lines=5)
install_btn.click(
supertonic_voice.install_supertonic,
outputs=install_output
)
gr.Markdown("""
### Manual Installation (Alternative):
```bash
# Clone the Supertonic repository
git clone https://github.com/supertone-inc/supertonic.git
cd supertonic
# Download ONNX models (requires git-lfs)
git clone https://huggingface.co/Supertone/supertonic assets
# Install dependencies
cd py
pip install -r requirements.txt
# Run example
python example_onnx.py
```
""")
# Voice Recording Tab
with gr.Tab("π€ Voice Recording"):
gr.Markdown("""
## Record Voice Samples
Record or upload audio to create voice profiles for cloning.
**Tips:**
- Record in a quiet environment
- Speak clearly and naturally
- 10-30 seconds is ideal
- Use good quality microphone
""")
with gr.Row():
with gr.Column():
voice_name_input = gr.Textbox(
label="Voice Name",
placeholder="e.g., Professional Male, Female Narrator",
info="Give your voice sample a name"
)
audio_input = gr.Audio(
label="Record or Upload Audio",
type="filepath",
sources=["microphone", "upload"]
)
record_btn = gr.Button("πΎ Save Voice Sample", variant="primary")
with gr.Column():
recorded_audio_output = gr.Audio(label="Recorded Audio")
record_status = gr.Textbox(label="Status", lines=3)
record_btn.click(
supertonic_voice.record_voice,
inputs=[audio_input, voice_name_input],
outputs=[recorded_audio_output, record_status]
)
gr.Markdown("""
### Recording Controls:
- π€ **Record**: Click microphone icon to record
- π **Upload**: Or upload existing audio file
- βΈοΈ **Pause**: Pause recording anytime
- βΉοΈ **Stop**: Stop and save recording
- βͺ **Rewind**: Listen to your recording
- π **Retry**: Re-record if needed
""")
# Voice Cloning Tab
with gr.Tab("π Voice Cloning"):
gr.Markdown("""
## Clone Voice with Text-to-Speech
Use recorded voice to synthesize new speech with any text.
**How it works:**
1. Upload/record source voice
2. Enter text you want synthesized
3. Click "Clone Voice"
4. Get audio in cloned voice!
""")
with gr.Row():
with gr.Column():
source_audio = gr.Audio(
label="Source Voice",
type="filepath",
sources=["microphone", "upload"]
)
target_text = gr.Textbox(
label="Text to Synthesize",
placeholder="Enter the text you want to be spoken in the cloned voice...",
lines=5
)
clone_btn = gr.Button("ποΈ Clone Voice", variant="primary", size="lg")
with gr.Column():
cloned_audio_output = gr.Audio(label="Cloned Voice Output")
clone_status = gr.Textbox(label="Status", lines=5)
download_btn = gr.Button("πΎ Download Cloned Audio")
clone_btn.click(
supertonic_voice.clone_voice,
inputs=[source_audio, target_text],
outputs=[cloned_audio_output, clone_status]
)
gr.Markdown("""
### Voice Cloning Tips:
- Use high-quality source audio
- Longer source = better cloning
- Clear pronunciation improves results
- Test with short text first
""")
# Audio Processing Tab
with gr.Tab("ποΈ Audio Processing"):
gr.Markdown("""
## Professional Audio Processing
Enhance, clean, and optimize your audio recordings.
""")
with gr.Row():
with gr.Column():
process_audio_input = gr.Audio(
label="Audio to Process",
type="filepath",
sources=["microphone", "upload"]
)
processing_type = gr.Dropdown(
choices=[
"enhance",
"normalize",
"denoise",
"pitch_shift"
],
label="Processing Type",
value="enhance"
)
process_btn = gr.Button("βοΈ Process Audio", variant="primary")
with gr.Column():
processed_audio_output = gr.Audio(label="Processed Audio")
process_status = gr.Textbox(label="Status", lines=3)
process_btn.click(
supertonic_voice.process_audio,
inputs=[process_audio_input, processing_type],
outputs=[processed_audio_output, process_status]
)
gr.Markdown("""
### Processing Options:
- **Enhance**: Improve overall audio quality
- **Normalize**: Balance volume levels
- **Denoise**: Remove background noise
- **Pitch Shift**: Adjust voice pitch
""")
# Voice Profiles Tab
with gr.Tab("πΎ Voice Profiles"):
gr.Markdown("""
## Manage Voice Profiles
View, export, and manage your saved voice recordings.
""")
refresh_btn = gr.Button("π Refresh Recordings List")
recordings_list = gr.Markdown()
refresh_btn.click(
supertonic_voice.get_recordings_list,
outputs=recordings_list
)
with gr.Row():
export_voice_name = gr.Textbox(
label="Voice Name to Export",
placeholder="Enter voice name"
)
export_btn = gr.Button("π€ Export Voice Profile", variant="primary")
export_file = gr.File(label="Exported Profile")
export_status = gr.Textbox(label="Status")
export_btn.click(
supertonic_voice.export_voice_profile,
inputs=export_voice_name,
outputs=[export_file, export_status]
)
# Instructions & Resources Tab
with gr.Tab("π Instructions"):
gr.Markdown("""
# Complete Voice Cloning Guide
## π― Quick Start
### 1. Installation (First Time Only)
1. Go to **π¦ Installation** tab
2. Click **"Install Supertonic"**
3. Wait 2-3 minutes
4. Installation complete!
### 2. Record Voice Sample
1. Go to **π€ Voice Recording** tab
2. Enter a name for your voice
3. Click microphone icon to record (or upload file)
4. Record 10-30 seconds of speech
5. Click **"Save Voice Sample"**
### 3. Clone Voice
1. Go to **π Voice Cloning** tab
2. Upload your voice sample
3. Enter text you want synthesized
4. Click **"Clone Voice"**
5. Listen to result!
### 4. Process Audio (Optional)
1. Go to **ποΈ Audio Processing** tab
2. Upload audio
3. Select processing type
4. Click **"Process Audio"**
---
## ποΈ Recording Best Practices
### For Best Results:
- **Environment**: Quiet room with minimal echo
- **Distance**: 6-12 inches from microphone
- **Volume**: Speak at normal conversational level
- **Content**: Read varied sentences (10-30 seconds)
- **Quality**: Use good microphone if possible
### What to Record:
- Natural speech
- Different emotions
- Various sentence structures
- Clear pronunciation
---
## π Voice Cloning Tips
### Input Quality:
- Longer source audio = better results
- Clear pronunciation essential
- Consistent tone helps
- Remove background noise first
### Text Guidelines:
- Start with short phrases
- Test different styles
- Use punctuation for natural pauses
- Experiment with length
---
## ποΈ Audio Controls Guide
### Recording Controls:
- **π€ Record**: Start recording from microphone
- **π Upload**: Upload existing audio file
- **βΈοΈ Pause**: Pause recording
- **βΉοΈ Stop**: Stop and save
- **βͺ Play**: Listen to recording
- **π Retry**: Record again
### Playback Controls:
- **βΆοΈ Play**: Play audio
- **βΈοΈ Pause**: Pause playback
- **βΉοΈ Stop**: Stop playback
- **βͺ Rewind**: Go to start
- **β© Fast Forward**: Skip ahead
- **π Volume**: Adjust volume
---
## π Resources & Links
### Official Resources:
- **Supertonic GitHub**: https://github.com/supertone-inc/supertonic
- **Model Repository**: https://huggingface.co/Supertone/supertonic
- **Documentation**: Full guide on GitHub README
### ProVerBs Ultimate Brain:
- **Main Space**: https://huggingface.co/spaces/Solomon7890/ProVerbS_LaW_mAiN_PAgE
- **Settings**: Configure API keys and preferences
- **Analytics**: View usage statistics
### Support:
- Check GitHub issues for help
- Review examples in repository
- Test with provided sample audio
---
## β οΈ Troubleshooting
### Installation Issues:
- Ensure git is installed
- Check internet connection
- Try manual installation
- Review error messages
### Recording Issues:
- Check microphone permissions
- Test microphone in other apps
- Try uploading file instead
- Use supported formats (WAV, MP3)
### Cloning Issues:
- Verify source audio quality
- Try shorter text first
- Check Supertonic installation
- Review processing logs
---
## π Advanced Usage
### Voice Profile Management:
- Save multiple voice samples
- Export profiles for backup
- Import profiles on other systems
- Organize by use case
### Batch Processing:
- Clone multiple texts at once
- Process audio in batches
- Export all results
- Automate workflows
### Integration:
- Use with legal documents
- Generate audio summaries
- Create voice assistants
- Accessibility features
""")
# Footer
gr.Markdown("""
---
<div style="text-align: center; padding: 20px;">
<p><strong>ποΈ Supertonic Voice Cloning</strong> | Powered by Supertonic AI</p>
<p>Part of ProVerBs Ultimate Legal AI Brain</p>
<p><a href="https://github.com/supertone-inc/supertonic" target="_blank">GitHub</a> |
<a href="https://huggingface.co/Supertone/supertonic" target="_blank">Models</a> |
<a href="https://huggingface.co/spaces/Solomon7890/ProVerbS_LaW_mAiN_PAgE" target="_blank">Main Space</a></p>
</div>
""")
return supertonic_ui
# For standalone testing
if __name__ == "__main__":
demo = create_supertonic_interface()
demo.launch(server_name="0.0.0.0", server_port=7861)
|