1 Star 1 Fork 0

wulala乌啦啦/hwpack

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
tts.go 2.76 KB
一键复制 编辑 原始数据 按行查看 历史
wulala乌啦啦 提交于 2021-08-14 11:16 +08:00 . 增加语音合成的接口
package tts
import "C"
import (
"fmt"
"os"
"gitee.com/wulalade/hwpack/audio"
)
type TTSLoginConf struct {
WorkDir string `json:"work_dir"`
AppId string `json:"appid"`
}
type TTSConf struct {
EngineType string `json:"engine_type"`
VoiceName string `json:"voice_name"`
TextEncoding string `json:"text_encoding"`
TtsResPath string `json:"tts_res_path"`
SampleRate int `json:"sample_rate"`
Speed int `json:"speed"`
Volume int `json:"volume"`
Pitch int `json:"pitch"`
Rdn int `json:"rdn"`
Rcn int `json:"rcn"`
}
func (ttsConf TTSConf) ToTTSParams() string {
return fmt.Sprintf("engine_type = %s, voice_name = %s, text_encoding = %s, tts_res_path = %s, sample_rate = %d, speed = %d, volume = %d, pitch = %d, rdn = %d, rcn = %d",
ttsConf.EngineType,
ttsConf.VoiceName,
ttsConf.TextEncoding,
fmt.Sprintf("fo|%s%s.jet;fo|%scommon.jet", ttsConf.TtsResPath, ttsConf.VoiceName, ttsConf.TtsResPath),
ttsConf.SampleRate,
ttsConf.Speed,
ttsConf.Volume,
ttsConf.Pitch,
ttsConf.Rdn,
ttsConf.Rcn)
}
func (ttsLoginConf TTSLoginConf) ToTTSLoginParams() string {
return fmt.Sprintf("appid = %s, work_dir = %s",
ttsLoginConf.AppId,
ttsLoginConf.WorkDir)
}
// 生成wav文件
func GetTTSWavFile(ttsParmas, speedTxt, desPath string) error {
audioData, err := TTSWavData(ttsParmas, speedTxt)
if err != nil {
//fmt.Println("TTSWavData")
return err
}
//file, err := os.OpenFile(desPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
//file, err := os.OpenFile(desPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
file, err := os.OpenFile(desPath, os.O_RDWR|os.O_CREATE, 0666)
if err != nil {
//fmt.Println("OpenFile")
return err
}
defer file.Close()
_, err = file.Write(audioData)
if err != nil {
//fmt.Println("Write")
return err
}
return nil
}
func Login(loginParams string) error {
return MSPLogin(loginParams)
}
func Logout() error {
return MSPLogout()
}
// 获取语音的二进制数据
func TTSWavData(ttsParmas, speedTxt string) ([]byte, error) {
audioData := audio.NewWAV()
data, err := TTSData(ttsParmas, speedTxt)
if err != nil {
return nil, err
}
audioData.AddAudioData(data)
return audioData.Data(), nil
}
func TTSData(ttsParmas, speedTxt string) ([]byte, error) {
ttsData := make([]byte, 0)
if speedTxt == "" {
return ttsData, nil
}
/* 开始合成 */
sessionID, err := QTTSSessionBegin(ttsParmas)
if err != nil {
return nil, err
}
defer QTTSSessionEnd(sessionID, "Normal")
if err = QTTSTextPut(sessionID, speedTxt, ""); err != nil {
return nil, err
}
for true {
data, synthStatus, err := QTTSAudioGet(sessionID)
if err != nil {
return nil, err
}
if data != nil {
ttsData = append(ttsData, data...)
}
if synthStatus == 2 {
break
}
}
return ttsData, nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wulalade/hwpack.git
git@gitee.com:wulalade/hwpack.git
wulalade
hwpack
hwpack
4a210dae89ef

搜索帮助