GPT-SoVITS icon indicating copy to clipboard operation
GPT-SoVITS copied to clipboard

如果已经使用自行训练的模型, 为什么还需要参考音频

Open fastfading opened this issue 1 year ago • 12 comments
trafficstars

如果已经使用自行训练的模型, 为什么还需要参考音频, 能否去掉参考音频

如果对于同一个角色要多次语音输出。
目前api 需要每一次都设定参考音频, 能不能把每次计算参考音频步骤省略掉, 并给出一个示例

fastfading avatar Aug 05 '24 06:08 fastfading

参考音频可以在api.py启动时指定,实际运行的时候,如果没有切换参考音频的话是读取缓存的,不会重复计算

KamioRinn avatar Aug 05 '24 10:08 KamioRinn

多谢, 考虑galgame 的场景 可能有多个音色对话
这种情况下,如何效率最高? 开多个实例,多个端口, 每个端口一个音色吗?

fastfading avatar Aug 06 '24 01:08 fastfading

多谢, 考虑galgame 的场景 可能有多个音色对话 这种情况下,如何效率最高? 开多个实例,多个端口, 每个端口一个音色吗?

改造API,对模型和参考音频存储到一个“人物”的结构中,然后再存到“人物”的列表里,增加一个“人物”参数来传,可能比较方便你使用

KamioRinn avatar Aug 06 '24 08:08 KamioRinn

class Speaker:
    def __init__(self, name, gpt, sovits, phones = None, bert = None, prompt = None):
        self.name = name
        self.sovits = sovits
        self.gpt = gpt
        self.phones = phones
        self.bert = bert
        self.prompt = prompt
        
speaker_list = {}
def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, top_k= 20, top_p = 0.6, temperature = 0.6, speed = 1, spk = "default"):
    infer_sovits = speaker_list[spk].sovits
    vq_model = infer_sovits.vq_model
    hps = infer_sovits.hps

    infer_gpt = speaker_list[spk].gpt
    t2s_model = infer_gpt.t2s_model
    max_sec = infer_gpt.max_sec

大概就是这样,需要将我列出来的参数传入结构体和列表管理切换,原版的API是通过全局变量实现

KamioRinn avatar Aug 06 '24 09:08 KamioRinn

这个需求还挺常见的,能不能直接写到你的API.py代码中?

另外我还看到一个项目, 根据reference audio 控制情感 这种情况下又如何cache , 如何设计数据结构呢。
能不能直接给出代码 https://github.com/2DIPW/gpt_sovits_infer_with_emotion ref_dict: 一般: Path: "ref_audio/normal.wav" Text: "既然罗莎莉亚说足迹上有元素力,用元素视野应该能很清楚地看到吧。" 惊讶: Path: "ref_audio/surprised.wav" Text: "这个声音是…一斗!你怎么在这里啊?" 高兴: Path: "ref_audio/excited.wav" Text: "好耶!《特尔克西的奇幻历险》出发咯!" 悲伤: Path: "ref_audio/sad.wav" Text: "呜…别这么伤心…我们会找到他们的!往好的一面想吧!" 喜好: Path: "ref_audio/like.wav" Text: "豪华礼物!听、听上去就很值钱!" 厌恶: Path: "ref_audio/dislike.wav" Text: "说了半天,这不还是面子的问题吗!" 愤怒: Path: "ref_audio/angry.wav" Text: "呜哇好生气啊!不要把我跟一斗相提并论!" 恐惧: Path: "ref_audio/fear.wav" Text: "我还以为见不到你了!你突然就消失了呀!"

这个实现是否cache的效率不高

fastfading avatar Aug 07 '24 00:08 fastfading

其实这里分为多个层次

  1. 角色音色 ckpt pth
  2. 角色语种 (en/zh/jp) bert related ??
  3. 角色情绪 reference wav

这些都是galgame 中必须的, 能否考虑优化一下api.py 支持上诉需求 每一种组合都有一个cache ,以支持快速切换

fastfading avatar Aug 07 '24 08:08 fastfading

自己改代码吧

KamioRinn avatar Aug 07 '24 17:08 KamioRinn

有同样的问题,为什么需要参考音频,zero-shot?

kevin1sMe avatar Aug 10 '24 07:08 kevin1sMe

大概就是这样,需要将我列出来的参数传入结构体和列表管理切换,原版的API是通过全局变量实现

我想來實現這個功能,有幾個問題想請教

  1. Speaker的, phones, bert, prompt具體是什麼用的呢?
  2. 要打包ref_wav_path, prompt_text, prompt_language, inp_refs,這幾個參數轉成torch.tensor放到GPU(如果有的話),放進Speaker中,這樣思路對嗎?

k0286 avatar Sep 09 '24 10:09 k0286

我想來實現這個功能,有幾個問題想請教

  1. Speaker的, phones, bert, prompt具體是什麼用的呢?
  2. 要打包ref_wav_path, prompt_text, prompt_language, inp_refs,這幾個參數轉成torch.tensor放到GPU(如果有的話),放進Speaker中,這樣思路對嗎?

api.py中已包含了相关基础代码,可以查看下。仅需要自己添加speaker信息的自定义更新

KamioRinn avatar Sep 09 '24 10:09 KamioRinn

api.py中已包含了相关基础代码,可以查看下。仅需要自己添加speaker信息的自定义更新

感謝回覆,確實已參考目前的api.py,已包含speaker參數,但參考音頻不包含在Speaker中且仍然是在get_tts_wav()才進行加載和轉換,

所以才產生前面的問題,且Speaker的 phones, bert, prompt似乎未被用過,所以想請教一下用途

k0286 avatar Sep 11 '24 01:09 k0286

感謝回覆,確實已參考目前的api.py,已包含speaker參數,但參考音頻的仍到get_tts_wav()才進行加載和轉換,

所以才產生前面的問題,且Speaker的 phones, bert, prompt似乎未被用過,所以想請教一下用途

Speaker的 phones, bert, prompt在现有代码里并未启用,要启用的话可以在get_tts_wav()中处理参考音频的时候检测Speaker是否已经包含 phones, bert, prompt,是则跳过不转换。

目前Speaker在api里的开启的用途只是保证多人使用时切换全局变量不会导致推理一半的信息出错,并保留了拓展性给大家自己进行模型切换

KamioRinn avatar Sep 11 '24 02:09 KamioRinn