Skip to content
GetcharZpPublic

About

go-speech 基于 Golang + ONNX 构建的轻量语音库,支持 TTS(文本转语音)与 ASR(语音转文字)。已集成 MeloTTS、Piper、达摩院 Paraformer 架构模型、Whisper 模型。

Topics

Resources

Stars

61 stars

Watchers

1 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

Repository files navigation

license mit
pipeline_tag text-to-speech
tags
text-to-speech
automatic-speech-recognition
logo

go-speech forks go-speech stars go-speech pull-requests

go-speech 基于 Golang + ONNX 构建的轻量语音库,支持 TTS(文本转语音)与 ASR(语音转文字)。 集成 MeloTTS、Piper、达摩院 Paraformer 架构模型、Whisper 模型。

安装

1. 安装 Go 依赖

go get -u github.com/getcharzp/go-speech

2. 按需下载模型与动态链接库

模型与动态链接库存放在独立仓库(HuggingFace,含 ModelScope 国内镜像),无需全量下载,请根据实际使用的引擎按需下载所需文件。

动态链接库选择

onnxruntime 动态链接库需按运行平台选择(默认放置于 lib/ 目录,可通过 OnnxRuntimeLibPath 自定义路径):

平台 文件
Linux lib/onnxruntime_amd64.so
Windows lib/onnxruntime.dll
macOS lib/onnxruntime_amd64.dylib

快速开始

TTS

MeloTTS 支持中英混合合成

package main

import (
	"github.com/getcharzp/go-speech/tts/melotts"
	"github.com/up-zero/gotool/fileutil"
	"log"
)

func main() {
	ttsEngine, err := melotts.NewEngine(melotts.DefaultConfig())
	if err != nil {
		log.Fatalf("创建引擎失败: %v", err)
	}
	defer ttsEngine.Destroy()

	text := "2019年12月30日,中国人口突破14亿人,联系电话: 13800138000。"
	wavData, err := ttsEngine.SynthesizeToWav(text, 1.0)
	if err != nil {
		log.Fatalf("合成失败: %v", err)
	}

	outputPath := "output.wav"
	err = fileutil.FileSave(outputPath, wavData)
	if err != nil {
		log.Fatalf("保存 WAV 失败: %v", err)
	}
}

Piper 支持中文合成

package main

import (
	"github.com/getcharzp/go-speech/tts/pipertts"
	"github.com/up-zero/gotool/fileutil"
	"log"
)

func main() {
	cfg := pipertts.Config{
		OnnxRuntimeLibPath: "../lib/onnxruntime.dll",
		ModelPath:          "../pipertts_weights/zh_CN-xiao_ya-medium.onnx",
		ConfigPath:         "../pipertts_weights/zh_CN-xiao_ya-medium.onnx.json",
	}

	ttsEngine, err := pipertts.NewEngine(cfg)
	if err != nil {
		log.Fatalf("创建引擎失败: %v", err)
	}
	defer ttsEngine.Destroy()

	testText := "2019年12月30日,中国人口突破14亿人。联系电话: 13800138000。"
	wavBytes, err := ttsEngine.SynthesizeToWav(testText)
	if err != nil {
		log.Fatalf("合成失败: %v", err)
	}

	outputPath := "pipertts_output.wav"
	err = fileutil.FileSave(outputPath, wavBytes)
	if err != nil {
		log.Fatalf("保存失败: %v", err)
	}
}

ASR

Paraformer

package main

import (
	"fmt"
	"github.com/getcharzp/go-speech/asr/paraformer"
	"log"
)

func main() {
	asrEngine, err := paraformer.NewEngine(paraformer.DefaultConfig())
	if err != nil {
		log.Fatalf("创建引擎失败: %v", err)
	}
	defer asrEngine.Destroy()

	text, err := asrEngine.TranscribeFile("./zh-en.wav")
	if err != nil {
		log.Printf("识别出错: %v", err)
		return
	}
	fmt.Printf("识别结果: %s\n", text)
}

Whisper

package main

import (
	"fmt"
	"github.com/getcharzp/go-speech/asr/whisper"
	"log"
)

func main() {
	asrEngine, err := whisper.NewEngine(whisper.DefaultConfig())
	if err != nil {
		log.Fatalf("创建引擎失败: %v", err)
	}
	defer asrEngine.Destroy()

	text, err := asrEngine.TranscribeFile("./zh-en.wav", whisper.TranscribeOption{
		Language: whisper.LangZh,
		Task:     whisper.TaskTranscribe,
	})
	if err != nil {
		log.Fatalf("识别出错: %v", err)
		return
	}
	fmt.Printf("识别结果: %s\n", text) // Yesterday was星期一Today is Tuesday明天是星期三
}

About

go-speech 基于 Golang + ONNX 构建的轻量语音库,支持 TTS(文本转语音)与 ASR(语音转文字)。已集成 MeloTTS、Piper、达摩院 Paraformer 架构模型、Whisper 模型。

Topics

Resources

Stars

61 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages