Skip to content

Entity-Now/Edge_tts_sharp

Repository files navigation

Edge_tts_sharp

Edge_tts_sharp 是一个免费的C#库(版本1.1.5),调用Microsoft Edge Text to Speech接口生成高质量的语音音频。

项目特点

  • 免费使用:无需API密钥,直接调用Microsoft Edge的TTS服务
  • 多语言支持:支持包括中文在内的多种语言和声音
  • 自定义设置:可调整语速、音量等参数
  • 灵活输出:支持直接播放或保存为音频文件
  • 播放控制:支持播放、暂停、继续、停止等基本操作
  • 跨平台:基于.NET Standard 2.0,可在多种平台上运行

快速开始

安装

通过NuGet包管理器安装:

NuGet\Install-Package Edge_tts_sharp

基本用法示例

using Edge_tts_sharp;
using Edge_tts_sharp.Model;

// 设置为同步模式,等待函数执行完毕
Edge_tts.Await = true;

// 创建播放选项
PlayOption option = new PlayOption
{
    Text = "你好,这是Edge TTSSharp的示例文本。",
    Rate = 0,      // 语速,范围:-100到100
    Volume = 1.0f  // 音量,范围:0到1
};

// 获取中文语音(例如:晓晓)
var voice = Edge_tts.GetVoice().FirstOrDefault(v => v.Name.Contains("Xiaoxiao"));

// 播放文本
Edge_tts.PlayText(option, voice);

核心功能

1. 文本转语音播放

static void TextToAudio()
{
    PlayOption option = new PlayOption
    {
        Rate = 0,     // 语速
        Text = "Hello EdgeTTs",  // 要转换的文本
    };
    
    // 获取第一个可用的语音
    var voice = Edge_tts.GetVoice().First();
    
    // 播放文本
    Edge_tts.PlayText(option, voice);
}

2. 保存音频到本地

static void SaveAudio()
{
    PlayOption option = new PlayOption
    {
        Rate = 0,                   // 语速
        Text = "Hello EdgeTTs",    // 要转换的文本
        SavePath = "C:\\audio.mp3"  // 保存路径
    };
    
    // 获取特定语音(例如:中文晓晓)
    var voice = Edge_tts.GetVoice().FirstOrDefault(i => 
        i.Name == "Microsoft Server Speech Text to Speech Voice (zh-CN, XiaoxiaoNeural)");
    
    // 保存音频
    Edge_tts.SaveAudio(option, voice);
}

3. 获取音频播放器对象

通过GetPlayer方法可以获取一个AudioPlayer对象,支持对音频进行更精细的控制,例如:开始、暂停、继续播放、重新播放、停止播放等:

static void GetPlayerAndControl()
{
    PlayOption option = new PlayOption
    {
        Rate = 0,
        Text = "这是一段可以控制播放的文本内容。",
    };
    
    // 获取语音
    var voice = Edge_tts.GetVoice().FirstOrDefault(v => v.Name.Contains("Xiaoxiao"));
    
    // 获取播放器对象
    var player = Edge_tts.GetPlayer(option, voice);

    Console.WriteLine("开始播放");
    player.PlayAsync();
    Thread.Sleep(3000);

    Console.WriteLine("暂停播放");
    player.Pause();
    Thread.Sleep(3000);

    Console.WriteLine("继续播放(从暂停位置)");
    player.PlayAsync();
    Thread.Sleep(2000);

    Console.WriteLine("重新播放(从头开始)");
    player.Resume();
    Thread.Sleep(3000);

    Console.WriteLine("停止播放");
    player.Stop();
}

4. 自定义处理音频数据

使用Invoke方法可以自定义处理生成的音频数据:

static void CustomProcessAudio()
{
    PlayOption option = new PlayOption
    {
        Rate = 0,
        Text = "这是一段将被自定义处理的文本。",
    };
    
    // 获取语音
    var voice = Edge_tts.GetVoice().FirstOrDefault(v => v.Name.Contains("Xiaoxiao"));
    
    // 自定义处理
    Edge_tts.Invoke(option, voice, audioData =>
    {
        // 这里可以对音频数据进行自定义处理
        Console.WriteLine($"接收到{audioData.Count}字节的音频数据");
        // 例如:保存到自定义位置、实时处理等
        // 注意:此回调函数在音频完全生成后才会被调用一次
    });
}

5. 获取支持的语音列表

using Edge_tts_sharp;

// 获取所有支持的语音
var voices = Edge_tts.GetVoice();

// 遍历并显示语音信息
foreach(var voice in voices)
{
    Console.WriteLine($"语音名称: {voice.Name}");
    Console.WriteLine($"语言区域: {voice.Locale}");
    Console.WriteLine($"音频格式: {voice.SuggestedCodec}");
    Console.WriteLine($"友好名称: {voice.FriendlyName}");
    Console.WriteLine($"性别: {voice.Gender}");
    Console.WriteLine("------------------------");
}

音频播放工具(Audio类)

Audio类提供了一些静态方法,可以直接播放不同来源的音频:

// 从流播放音频
await Audio.PlayToStreamAsync(stream, volume: 1.0f, speed: 0.0f);

// 从字节数组播放音频
await Audio.PlayToByteAsync(audioBytes, volume: 1.0f, speed: 0.0f);

// 从文件路径播放音频
await Audio.PlayAudioAsync("path/to/audio.mp3", volume: 1.0f, speed: 0.0f);

// 从URL播放音频
await Audio.PlayAudioFromUrlAsync("https://example.com/audio.mp3", volume: 1.0f, speed: 0.0f);

配置参数

全局配置

参数 类型 说明
Edge_tts.Debug bool 调试模式,设为true时显示详细日志
Edge_tts.Await bool 同步模式,设为true时会等待函数执行完毕

PlayOption 配置项

属性 类型 说明 默认值
Text string 要转换为语音的文本内容 string.Empty
Rate int 语速,范围:-100(最慢)到100(最快) 0
Volume float 音量,范围:0(静音)到1(最大) 1.0f
SavePath string 音频保存路径,为空时不保存文件 string.Empty

支持的中文语音

下表列出了部分常用的中文语音选项:

ShortName Locale 地区
zh-HK-HiuGaaiNeural zh-HK 香港
zh-HK-HiuMaanNeural zh-HK 香港
zh-HK-WanLungNeural zh-HK 香港
zh-CN-XiaoxiaoNeural zh-CN 中国大陆
zh-CN-XiaoyiNeural zh-CN 中国大陆
zh-CN-YunjianNeural zh-CN 中国大陆
zh-CN-YunxiNeural zh-CN 中国大陆
zh-CN-YunxiaNeural zh-CN 中国大陆
zh-CN-YunyangNeural zh-CN 中国大陆
zh-CN-liaoning-XiaobeiNeural zh-CN-liaoning 中国辽宁
zh-TW-HsiaoChenNeural zh-TW 台湾
zh-TW-YunJheNeural zh-TW 台湾
zh-TW-HsiaoYuNeural zh-TW 台湾
zh-CN-shaanxi-XiaoniNeural zh-CN-shaanxi 中国陕西

技术原理

Edge_tts_sharp 通过 WebSocket 连接到 Microsoft Edge 的 TTS 服务,发送 SSML (Speech Synthesis Markup Language) 格式的请求,并接收返回的音频流。整个流程包括:

  1. 建立与 Microsoft Edge TTS 服务的 WebSocket 连接
  2. 发送音频格式配置
  3. 将文本转换为 SSML 格式并发送
  4. 接收并处理返回的音频数据
  5. 根据配置进行播放或保存

项目结构

Edge_tts_sharp/
├── Edge_tts.cs           # 核心功能实现
├── Model/
│   ├── Log.cs            # 日志模型
│   ├── PlayOption.cs     # 播放选项模型
│   └── eVoice.cs         # 语音模型
├── Source/
│   └── VoiceList.json    # 内置语音列表
├── Utils/
│   ├── Audio.cs          # 音频处理工具
│   ├── AudioPlayer.cs    # 音频播放器
│   └── AudioStreamer.cs  # 音频流处理
├── Tools.cs              # 通用工具类
└── Wss.cs                # WebSocket封装

依赖项

注意事项

  1. 本库依赖于Microsoft Edge TTS服务,需要保持网络连接
  2. 请合理使用服务,避免过度请求
  3. 如需在生产环境中大规模使用,建议考虑Microsoft的官方Azure TTS服务
  4. 保存音频文件时,请确保应用程序有足够的文件系统权限

更新历史

  • 2023.10.28 - 首次发布
  • 2023.10.30 - 更新调用接口方式

贡献指南

欢迎提交问题和改进建议。如果您希望为项目做出贡献,请遵循以下步骤:

  1. Fork 本仓库
  2. 创建您的功能分支
  3. 提交您的更改
  4. 推送到分支
  5. 创建新的 Pull Request

许可证

MIT License

联系方式

如有任何问题或建议,请通过GitHub Issues联系我们。

About

免费调用微软Edge浏览器文本转语音接口

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages