huakunyang / SummerTTS

SummerTTS 是一个基于C++的独立编译的中文和英文语音合成项目,可以本地运行不需要网络,而且没有额外的依赖,一键编译完成即可用于中文和英文的语音合成。SummerTTS is a standalone Chinese and English speech synthesis(TTS) project that has almost no dependency and could be easily used for Chinese TTS with just one key build out
394 stars 70 forks source link

我该如何修改音高 #36

Closed aiaimimi0920 closed 8 months ago

aiaimimi0920 commented 8 months ago

@huakunyang 因为我要实现的接口是一个游戏引擎内的通用接口,其已有接口定义:

void tts_speak(text: String, voice: String, volume: int = 50, pitch: float = 1.0, rate: float = 1.0, utterance_id: int = 0, interrupt: bool = false)

向队列中添加发言。如果 interrupt 为 true,则会先清空队列。

- voice 语音标识符是 tts_get_voices() 所返回的 "id" 值,也可以是 tts_get_voices_for_language() 返回的值。

- volume 音量从 0(最低)到 100(最高)。

- pitch 音高从 0.0(最低)到 2.0(最高), 1.0 为当前语音的默认音高。

- rate 语速从 0.1(最低)到 10.0(最高), 1.0 为普通语速。其他值为相对百分比。

- utterance_id 话语 ID 会作为参数传递给回调函数。

我需要 volume ,pitch ,rate 这3个参数在SynthesizerTrn::infer(const string & line, int32_t sid, float lengthScale, int32_t & dataLen) 对应的参数是什么。

在我的认识中: rate 对应 lengthScale, volume 可以通过 retData[i]*=volume/100 实现 这样的对应关系对吗?

那么 我该如何获得 pitch 的对应实现?我没有在代码中发现,可以给我一个指导吗?

如果没有实现也不要紧,我可以自己实现一个,只是如果在summertts 已经使用的库或者代码的底层是否已经有了原生实现,有的话我就可以直接使用了。

huakunyang commented 8 months ago

音量和 rate的调整,你的理解是对的。 pitch 暂时无法调,本项目内部也没有实现pitch调整。简单改变pitch的开源方案很多,你可以找一个对接到生成的语音数据上。

aiaimimi0920 commented 8 months ago

嗯,理解,我自己实现就可以了,thanks