使用 Go 语言调用 SiliconFlow 语音生成 API 的脚本,用于将文本转换为 MP3 格式的语音文件。

使用 Go 语言调用 SiliconFlow 语音生成 API 的脚本,用于将文本转换为 MP3 格式的语音文件。

代码结构

包和依赖

go 复制代码
package main

import (
    "fmt"
    "io"
    "os"
    "path/filepath"
    "github.com/sashabaranov/go-openai"
)
  • 使用 go-openai 库与 OpenAI 兼容的 API 交互
  • 导入文件和路径处理所需的标准库包

OpenAI 客户端配置

go 复制代码
config := openai.DefaultConfig("sk-xxznqkrjqarsmwpeqfcbfylwmrlxysfzydxpowjxovlkxavp")
config.BaseURL = "https://api.siliconflow.cn/v1"
client := openai.NewClientWithConfig(config)
  • 使用自定义 API 密钥
  • 指定 SiliconFlow 的 API 基础 URL
  • 创建定制的 OpenAI 客户端

语音生成请求

go 复制代码
request := openai.CreateSpeechRequest{
    Model: "FunAudioLLM/CosyVoice2-0.5B",
    Input: "你能用高兴的情感说吗?...",
    Voice: "FunAudioLLM/CosyVoice2-0.5B:alex",
    ResponseFormat: openai.SpeechResponseFormatMp3,
}

关键参数:

  • Model:选择语音模型
  • Input:待转换的文本
  • Voice:指定音色
  • ResponseFormat:输出音频格式

错误处理与文件保存

go 复制代码
response, err := client.CreateSpeech(request)
if err != nil {
    fmt.Printf("语音生成失败: %v\n", err)
    return
}

speechFilePath := filepath.Join(filepath.Dir(os.Args[0]), "siliconcloud-generated-speech.mp3")
file, err := os.Create(speechFilePath)
defer file.Close()

_, err = io.Copy(file, response)
if err != nil {
    fmt.Printf("保存语音文件失败: %v\n", err)
    return
}
  • 使用 CreateSpeech() 生成语音
  • 动态确定文件保存路径
  • 使用 io.Copy() 保存文件
  • 详细的错误处理和日志输出

使用场景

  • 文本转语音
  • 多语言语音生成
  • 个性化语音定制

技术特点

  • 使用 Go 语言的并发特性
  • 简洁的错误处理机制
  • 灵活的 API 配置

依赖安装

bash 复制代码
go get github.com/sashabaranov/go-openai

注意事项

  1. 需要预先安装 Go 和依赖库
  2. API 密钥是敏感信息,不应硬编码
  3. 注意 API 使用限制和计费

推荐改进

  • 使用环境变量管理 API 密钥
  • 添加更详细的日志记录
  • 支持命令行参数配置
  • 增加对不同语音模型的支持

快来体验 siliconflow 图像描述服务:https://cloud.siliconflow.cn/i/vnCCfVaQ

快来体验 siliconflow 图像描述服务:https://cloud.siliconflow.cn/i/vnCCfVaQ

快来体验 siliconflow 图像描述服务:https://cloud.siliconflow.cn/i/vnCCfVaQ

相关推荐
2601_962071575 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
淡海水6 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero7 小时前
C语言sizeof是函数吗?
c语言·开发语言
东风破_7 小时前
从跨域到 WebSocket:前端跨域方案、SSE 与双向实时通信详解
前端·后端
-今昭-7 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
行百里er8 小时前
Gateway 上别硬塞 MVC:DeferredImportSelector 看菜下锅
spring boot·后端·开源
名字还没想好☜8 小时前
Java 遍历时删元素抛 ConcurrentModificationException:fail-fast 原理与三种正确删法
后端
IT_陈寒9 小时前
React Hooks闭包陷阱差点让我加班到凌晨
前端·人工智能·后端
黑马程序员毕设9 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
码事漫谈10 小时前
本体论,彻底懂
后端