Viewing File: /home/ubuntu/codegamaai-test/tts_openvoice/main_voice_style.py

import os
import torch
from OpenVoice.openvoice import se_extractor
from OpenVoice.openvoice.api import ToneColorConverter
import time
import uuid


speed = 1.0
device = "cuda:0" if torch.cuda.is_available() else "cpu"
ckpt_converter = os.path.join(os.environ['CHECKPOINT_DIR'], 'converter')
device = "cuda:0" if torch.cuda.is_available() else "cpu"
speaker_key = 'en-newest'

tone_color_converter = ToneColorConverter(os.path.join(ckpt_converter, 'config.json'), device=device)
tone_color_converter.load_ckpt(os.path.join(ckpt_converter, 'checkpoint.pth'))



reference_speaker = os.path.join(os.environ['RESOURCE_DIR'], 'example_reference.mp3')
target_se, audio_name = se_extractor.get_se(reference_speaker, tone_color_converter, vad=False)
# source_se = torch.load(f'checkpoints_v2/base_speakers/ses/{speaker_key}.pth', map_location=device)
source_se = torch.load(os.path.join(os.environ['CHECKPOINT_DIR'], 'base_speakers', 'ses', f'{speaker_key}.pth'), map_location=device)


def base_voice_style(input_audio_path, user_id, vid):

    output_dir = os.path.join(os.environ['DATASET_STORE'], str(user_id), str(vid), 'processed_audio')
    output_file_name = f'{user_id}_{vid}_{str(uuid.uuid4())}.wav'
    output_file_path = os.path.join(output_dir, output_file_name)
    output_file_url = os.path.join(os.environ['OUTPUT_MEDIA_URL'], 'data', str(user_id), str(vid), 'processed_audio', output_file_name)
    os.makedirs(output_dir, exist_ok=True)

    src_path = input_audio_path


    # Run the tone color converter
    encode_message = "@MyShell"
    tone_color_converter.convert(
        audio_src_path=src_path, 
        src_se=source_se, 
        tgt_se=source_se, 
        output_path=output_file_path,
        message=encode_message)

    return {"status": 1, "message": "Audio file generated successfully", "output_file": output_file_path, "output_file_url": output_file_url}


def voice_style(reference_speaker_path, speaker_key, input_audio_path, user_id, vid):

    ckpt_converter = os.path.join(os.environ['CHECKPOINT_DIR'], 'converter')


    output_dir = os.path.join(os.environ['DATASET_STORE'], str(user_id), str(vid), 'processed_audio')
    output_file_name = f'{user_id}_{vid}_{str(uuid.uuid4())}.wav'
    output_file_path = os.path.join(output_dir, output_file_name)
    output_file_url = os.path.join(os.environ['OUTPUT_MEDIA_URL'], 'data', str(user_id), str(vid), 'processed_audio', output_file_name)
    os.makedirs(output_dir, exist_ok=True)

    src_path = input_audio_path
    speaker_key = 'en-newest'

    tone_color_converter = ToneColorConverter(os.path.join(ckpt_converter, 'config.json'), device=device)

    tone_color_converter.load_ckpt(os.path.join(ckpt_converter, 'checkpoint.pth'))
    
    if reference_speaker_path is None:
        reference_speaker_path = os.path.join(os.environ['RESOURCES_DIR'], 'example_reference.mp3')
    elif not os.path.exists(reference_speaker_path):
        return {"status": 0, "message": "Reference speaker file does not exist", "output_file": None}
    
    target_se, audio_name = se_extractor.get_se(reference_speaker, tone_color_converter, vad=False)
    source_se = torch.load(f'checkpoints_v2/base_speakers/ses/{speaker_key}.pth', map_location=device)
    source_se = torch.load(os.path.join(os.environ['CHECKPOINT_DIR'], 'base_speakers', 'ses', f'{speaker_key}.pth'), map_location=device)

    # Run the tone color converter
    encode_message = "@MyShell"
    tone_color_converter.convert(
        audio_src_path=src_path, 
        src_se=source_se, 
        tgt_se=target_se, 
        output_path=output_file_path,
        message=encode_message)

    return {"status": 1, "message": "Audio file generated successfully", "output_file": output_file_path, "output_file_url": output_file_url}
Back to Directory File Manager