This project implements an advanced voice conversion system using GAN-based deep learning techniques. It can convert text-to-speech (TTS) audio to match the characteristics of a target voice while preserving the linguistic content.
voice_converter_v2.py: Main voice conversion implementationvoice_converter_runner.py: Runner script and user interfaceimproved_generator.py: Neural network architecturesaudio_processor.py: Audio processing utilities
/content/drive/MyDrive/VC: Training data directory/content/drive/MyDrive/VoiceGenv4/Output: Output directory/content/drive/MyDrive/VoiceGenv4/Output/model: Model weights directory/content/drive/MyDrive/VoiceGenv4/NewGenSample: Target voice samples/content/drive/MyDrive/VoiceGenv4/Output/generatedTTS: TTS audio directory
The VoxCeleb1 Datasetwas used.https://www.robots.ox.ac.uk/~vgg/data/voxceleb/vox1.html
Note:- The following modules are to be part of the project in the future, but are not being used right now.
- Module3TranscriberAndGenerator : Will be used to predict the following words that can be used to generate the continuation speech.
- Module5TTS : Text generated from Module3TranscriberAndGenerator will be used to create TTS. Right now, hard-coded static text is used to generate TTS
-
Install required dependencies:
- librosa (0.10.1)
- soundfile (0.12.1)
- tqdm (4.66.1)
- numpy (1.24.3)
- torch (2.1.0)
- matplotlib (3.7.2)
- scipy (1.11.3)
- parselmouth (0.4.3)
- simplejson (3.19.2)
-
Create necessary directories
-
Set up module structure
-
Data Preparation:
- Load training audio files
- Extract mel spectrograms
- Normalize using global statistics
- Apply data augmentation
-
Model Training:
- Initialize generator and discriminator
- Train using GAN approach
- Apply residual connections
- Use spectral normalization
- Implement learnable scaling
- Save checkpoints periodically
-
Training Features:
- Gradient clipping
- Learning rate scheduling
- Batch normalization
- Residual connections
- Checkpoint saving and resuming
-
Input Processing:
- Load TTS audio
- Load target voice
- Extract mel spectrograms
- Normalize using global statistics
-
Feature Extraction:
- Extract pitch contours
- Analyze duration patterns
- Detect stress patterns
- Extract linguistic features
-
Voice Conversion:
- Process through generator
- Apply voice characteristics
- Match linguistic features
- Blend source and target statistics
-
Post-processing:
- Apply audio enhancements
- Crossfade overlapping chunks
- Normalize output
- Save converted audio
-
Debug Conversion:
- Save intermediate outputs
- Track statistics
- Monitor feature matching
- Analyze conversion quality
-
Performance Analysis:
- Monitor training metrics
- Track conversion quality
- Analyze feature matching
- Evaluate output quality
- Generator with residual connections
- Discriminator with spectral normalization
- Learnable scaling for dynamic range
- Batch normalization for stability
- Mel spectrogram extraction
- Pitch extraction and modification
- Duration analysis
- Stress pattern detection
- Audio enhancement techniques
- Linguistic feature preservation
- Voice characteristic matching
- Natural prosody transfer
- High-quality audio output
- Stable GAN training
- Efficient memory usage
- Checkpoint saving
- Training resumption
- Progress monitoring
- Run
voice_converter_runner.py - Select option 1 for new training
- Monitor training progress
- Save checkpoints periodically
- Run
voice_converter_runner.py - Select option 3 for conversion
- Choose target voice
- Select TTS audio
- Process and save output
- Run
voice_converter_runner.py - Select option 4 for debug
- Analyze intermediate outputs
- Monitor conversion process
- Python 3.6+
- CUDA-capable GPU (recommended)
- Sufficient disk space for audio files
- Google Colab support (optional)
- Training requires significant computational resources
- Voice conversion quality depends on training data
- Debug mode helps analyze conversion process
- Regular checkpoint saving is recommended
- User runs
voice_converter_runner.py - Script executes
main()function which:- Calls
create_module_directory()to set up directory structure - Calls
install_dependencies()to install required packages - Calls
save_module_files()to initialize module files - Creates instance of
EnhancedVoiceConverterfromvoice_converter_v2.py
- Calls
- User selects option 1 (Train new model)
EnhancedVoiceConverter.train()is called which:- Initializes
ImprovedVoiceDatasetwith data from/content/drive/MyDrive/VC - Creates PyTorch DataLoader for batch processing
- Initializes
ImprovedGeneratorandImprovedDiscriminatorfromimproved_generator.py - Sets up optimizers and learning rate schedulers
- For each epoch:
- Calls
ImprovedVoiceDataset.__getitem__()for each batch - Processes audio through
AudioProcessor.audio_to_mel() - Updates
GlobalStatsusingupdate_from_batch() - Trains generator and discriminator in alternating fashion
- Saves checkpoint using
save_model()andsave_training_state()
- Calls
- Initializes
- User selects option 2 (Resume training)
EnhancedVoiceConverter.load_model(resume_training=True)is called which:- Checks for latest checkpoint in model directory
- Loads model weights using
torch.load() - Restores optimizer states
- Loads
GlobalStatsvalues - Returns to
train_from_epoch()with saved epoch number - Continues training from saved state
- User selects option 3 (Convert voice)
EnhancedVoiceConverter.load_model()is called to load trained model- User selects target voice and TTS audio files
EnhancedVoiceConverter.convert_voice()is called which:- Loads target voice using
AudioProcessor.load_audio() - Extracts target features using
AudioProcessor.extract_linguistic_features() - Loads TTS audio and extracts features
- Processes TTS audio through generator:
- Splits into chunks using
AudioProcessor.split_audio_into_chunks() - Processes each chunk through generator
- Combines chunks using
AudioProcessor.combine_chunks()
- Splits into chunks using
- Applies post-processing:
- Blends statistics using
blend_statistics() - Enhances audio using
AudioProcessor.enhance_audio() - Saves output using
AudioProcessor.save_audio()
- Blends statistics using
- Loads target voice using
- User selects option 4 (Debug conversion)
EnhancedVoiceConverter.debug_conversion()is called which:- Creates debug directory with timestamp
- Saves original audio files
- Extracts and saves mel spectrograms
- Processes small test chunk through generator
- Saves intermediate outputs:
- Input tensor statistics
- Output tensor statistics
- Different denormalization approaches
- Performs full conversion with detailed logging
- Saves all debug information to debug directory
get_available_files(): Used throughout to list audio filesAudioProcessormethods: Used for all audio processingGlobalStatsmethods: Used for normalizationblend_statistics(): Used for voice characteristic matching
- Checkpoint saving every epoch
- Gradient clipping during training
- Memory management for large audio files
- Fallback methods for feature extraction
- Error logging in debug mode