speech

package module
v0.0.0-...-49f9971 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 23, 2026 License: MIT Imports: 4 Imported by: 0

README


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 模型。

安装

# 下载包
go get -u github.com/getcharzp/go-speech

# 下载模型、动态链接库
git clone https://huggingface.co/getcharzp/go-speech

快速开始

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明天是星期三
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DefaultLibraryPath

func DefaultLibraryPath() string

DefaultLibraryPath 根据运行时环境判断加载哪个库文件

Types

type OnnxConfig

type OnnxConfig struct {
	SessionOptions *ort.SessionOptions
	OnnxEngine     *ort.Engine

	// 必填参数
	OnnxRuntimeLibPath string // onnxruntime.dll (或 .so, .dylib) 的路径
	// 可选参数
	UseCuda    bool // (可选) 是否启用 CUDA
	NumThreads int  // (可选) ONNX 线程数, 默认由CPU核心数决定

	// EnableCpuMemArena 控制 ONNX 的内存池策略
	// false (默认): 禁用内存池,推理速度稍慢,但 Destroy 后立即归还内存给 OS ,解决内存滞留问题
	// true: 启用内存池,推理速度最快,但 Destroy 后内存会被缓存以供复用
	EnableCpuMemArena bool
}

func (*OnnxConfig) New

func (cfg *OnnxConfig) New() error

New 初始化 ONNX 环境

Directories

Path Synopsis
asr
tts

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL