使用 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

相关推荐
不穿格子的程序员几秒前
从零开始刷算法-栈-括号匹配
java·开发语言·
雪域迷影16 分钟前
C#中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·http·c#·get
yue00817 分钟前
C#类继承
java·开发语言·c#
Want59525 分钟前
Python汤姆猫
开发语言·python
大鱼七成饱28 分钟前
💥 从崩溃到稳定:我踩过的 Rust Tokio 线程池坑(含代码示例)
后端
喵个咪1 小时前
开箱即用的GO后台管理系统 Kratos Admin - 站内信
后端·微服务·go
Larry_Yanan1 小时前
QML学习笔记(五十)QML与C++交互:QML中单例C++对象
开发语言·c++·笔记·qt·学习·ui·交互
凯芸呢1 小时前
Java中的数组(续)
java·开发语言·数据结构·算法·青少年编程·排序算法·idea
竹竹零1 小时前
JacksonUtil--序列化与反序列化
java·开发语言·windows
韩立学长1 小时前
基于Springboot的旧物公益捐赠管理系统3726v22v(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端