Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具[Python代码]

Edge-TTS,由微软推出的这款免费、开源的AI工具,为用户带来了丰富多样的中文语音体验。它不仅支持多种中文语音语色,还能实现流畅自然的语音合成。Edge-TTS凭借其高度可定制化的特点,广泛应用于智能助手、语音播报、教育培训等领域。这款工具的操作简便,兼容性强,让开发者能够轻松集成到各种应用中。最重要的是,Edge-TTS始终保持免费开源,为中文语音合成技术的研究与发展提供了有力支持,助力我国智能语音产业迈向新的高峰。

一,环境win11+python3.10

复制代码
pip install edge_tts

二,edge_tts生成mp3代码的实现:

复制代码
import asyncio
import edge_tts  # 假设 edge_tts 是一个有效的模块

# 定义文本内容、语音类型和输出文件名
TEXT: str = "大家好,欢迎关注语音之家,语音之家是一个助理AI语音开发者的社区。"
VOICE: str = "zh-CN-YunyangNeural"
OUTPUT_FILE: str = "test.mp3"

async def amain() -> None:
    """Main function that uses edge_tts to convert text to speech."""
    # 创建一个 Communicate 对象,用于文本到语音的转换
    communicate = edge_tts.Communicate(TEXT, VOICE)
    # 异步保存转换后的语音到文件
    await communicate.save(OUTPUT_FILE)

if __name__ == "__main__":
    # 获取当前事件循环(如果有的话)
    loop = asyncio.get_event_loop()
    if loop.is_running():
        print("Event loop is already running. Using run_coroutine_threadsafe.")
        # 如果事件循环已经在运行,请使用 run_coroutine_threadsafe
        future = asyncio.run_coroutine_threadsafe(amain(), loop)
        future.result()  # 等待协程完成
    else:
        loop.run_until_complete(amain())

在这个例子中,我为 TEXT, VOICE, 和 OUTPUT_FILE 变量添加了类型注解 str,表示它们是字符串类型。同时,我也为 amain 函数的返回类型添加了 None 注解,表示这个函数不返回任何值。

如果后面想应用到自己开发的环境。建议使用队列方式+云对象储存方式存放到mysql表。

三,关于腾讯云对象储存的代码实现

复制代码
import os
import random
import time
from qcloud_cos import CosConfig
from qcloud_cos import CosS3Client
import common
import hashlib
import ipdb

class QcloudCosToolClass:
    def __init__(self):
        """初始化腾讯云COS工具类"""
        self.config = common.readConfig()
        self.secret_id: str = self.config.get('qcloud_cos', 'secret_id')
        self.secret_key: str = self.config.get('qcloud_cos', 'secret_key')
        self.region: str = self.config.get('qcloud_cos', 'region')
        self.bucket: str = self.config.get('qcloud_cos', 'bucket')

    def cosUpload_file(self, local_file_path: str, cos_file_path: str = '') -> str:
        """上传文件到腾讯云COS"""
        token = None
        config = CosConfig(Region=self.region,
                           SecretId=self.secret_id,
                           SecretKey=self.secret_key,
                           Token=token)
        oClient = CosS3Client(config)

        if not cos_file_path:
            cos_file_path = self.create_filename(local_file_path)
        try:
            response = oClient.upload_file(
                Bucket=self.bucket,
                LocalFilePath=local_file_path,
                Key=cos_file_path
            )
            print("QcloudCosToolClass 上传文件成功 >>> ", self.config.get('qcloud_cos', 'cos_domain') + '/' + cos_file_path)
        except Exception as e:
            print(f"QcloudCosToolClass 上传错误:{e}")
            raise e
        return self.config.get('qcloud_cos', 'cos_domain') + '/' + cos_file_path

    def create_filename(self, local_file_path: str) -> str:
        """创建唯一的文件名"""
        new_filename = f"{int(time.time())}_{random.randint(1000, 9999)}"

        md5_hash = hashlib.md5()
        md5_hash.update(new_filename.encode('utf-8'))
        new_filename = md5_hash.hexdigest()

        file_extension = '.' + os.path.splitext(local_file_path)[1]
        cos_file_path = common._get_datetime("%Y%m") + '/' + f"{new_filename}{file_extension}"
        return cos_file_path

解释:

  1. __init__ 方法:初始化类实例,设置腾讯云COS的配置信息。
  2. cosUpload_file 方法 :接受本地文件路径和COS路径,上传文件到腾讯云COS。如果COS路径为空,则调用create_filename方法生成文件名。
  3. create_filename 方法:生成一个基于时间戳和随机数的唯一文件名,并计算其MD5值,最后加上文件扩展名。

这些注解有助于理解每个变量和函数的预期类型,以及函数的返回类型。如果你的common模块中的readConfig_get_datetime方法有特定的返回类型,你可能需要为这些方法也添加相应的类型注解

3-1,common.readConfig是一个读取ini的配置文件函数

复制代码
def readConfig():
    Config = configparser.ConfigParser()
    # 读取 INI 文件
    config_file = './config.ini'
   
    Config.read(config_file, 'utf8')
    return Config

3-2,config.ini文件的qcloud_cos配置

复制代码
[qcloud_cos]
cos_domain = https://oss.romeai.net
secret_id = AKIDbIqJ1eCnGn**********
secret_key = b5Sioow22Y0Mh*************
bucket = oss-1325526785
region = ap-shanghai

四,也可以考虑不使用云对象,自建个图床来代替。方法就是省钱。

icret/EasyImages2.0: 简单图床 - 一款功能强大无数据库的图床 2.0版 (github.com)https://github.com/icret/EasyImages2.0/tree/master

这个有2.6K Start. 朋友们有兴趣可以试一下。我这边没有花时间去调研。喜欢我的朋友可以加微信交友聊技术哈!

写在后面的几个应知问题:

  1. Edge-TTS是什么? Edge-TTS是一个基于Microsoft Edge浏览器的文本转语音工具。它利用微软Azure TTS技术,提供逼真自然的声音引擎。

  2. 需要联网吗? 是的,无论是试听还是录制,使用Edge-TTS的在线语音功能都需要确保电脑联网1。

  3. 如何使用Edge-TTS? 使用Edge-TTS工具(如Edge-TTS-record)时,需要运行相应的应用程序,输入文本,调整参数,然后进行试听和录制。录制的音频文件会保存在指定的目录下1。

  4. Edge-TTS的特点和限制? Edge-TTS支持多种语言和声音,转换速度快,音质好。不过,它是免费服务,主要适用于个人学习研究,不适合大规模并发使用场景3。

  5. Edge-TTS的安装和使用环境? Edge-TTS是一个Python模块,可以通过pip安装。它不依赖于特定的操作系统,但需要Microsoft Edge浏览器的支持3。

  6. Edge-TTS的适用场景? Edge-TTS适用于教育软件、辅助技术、沉浸式叙事等多种场景,因其高质量的语音合成功能,可以提升用户体验和开发效率3。

**7. 在python环境内使用edge-TTS是需要安装Edge浏览器?**在Python环境中使用Edge-TTS,并不需要安装Edge浏览器。Edge-TTS是一个Python模块,它允许用户通过Python代码使用Microsoft Edge的在线文本转语音服务。这个模块独立于浏览器,通过API与Edge的文本转语音服务进行交互。需要联网,但是不产生其它费用

相关推荐
小白学大数据28 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街28 分钟前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋678934 分钟前
用Python绘制梦幻星空
开发语言·python·pygame
alpszero1 小时前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11
白云千载尽1 小时前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros
咕噜咕噜啦啦1 小时前
python爬虫实战训练
爬虫·python
盛夏绽放2 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2612 小时前
Python训练营打卡DAY27
开发语言·python·机器学习
蹦蹦跳跳真可爱5892 小时前
Python----神经网络(基于DNN的风电功率预测)
人工智能·pytorch·python·深度学习·神经网络·dnn
冰轮a2 小时前
Python打卡 DAY 27
python