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的文本转语音服务进行交互。需要联网,但是不产生其它费用

相关推荐
敲代码不忘补水25 分钟前
二十种编程语言庆祝中秋节
java·javascript·python·golang·html
水木流年追梦42 分钟前
【python因果推断库16】使用 PyMC 模型进行回归拐点设计
开发语言·python·回归
营赢盈英1 小时前
OpenAI API key not working in my React App
javascript·ai·openai·reactjs·chatbot
akhfuiigabv1 小时前
使用LangChain创建简单的语言模型应用程序【快速入门指南】
java·python·语言模型·langchain
西猫雷婶1 小时前
python画图|中秋到了,尝试画个月亮(球体画法)
开发语言·python
俞兆鹏1 小时前
AI学习指南深度学习篇-RMSprop的Python实践
ai
William数据分析1 小时前
[Python可视化]数据可视化在医疗领域应用:提高诊断准确性和治疗效果
python·信息可视化·数据分析
测试杂货铺1 小时前
selenium元素定位:元素点击交互异常解决方法
自动化测试·软件测试·python·selenium·测试工具·职场和发展·单元测试
aWty_1 小时前
机器学习--线性回归
python·算法·机器学习·线性回归
白如意i2 小时前
在CentOS 7上安装Python 3并设置本地编程环境的方法
linux·python·centos