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

news2024/11/18 6:19:10

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)icon-default.png?t=N7T8https://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的文本转语音服务进行交互。需要联网,但是不产生其它费用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加速自动驾驶模型迭代,数据存算一体是关键

自动驾驶的每一个业务阶段都会涉及到 AI 深度学习算法和算力的参与,机器视觉,深度学习,传感器技术等均在自动驾驶领域发挥着重要的作用。自动驾驶系统不断迭代的前提是算法的持续优化,目前,自动驾驶发展的瓶颈主要在于…

【笔记】0基础python学爬虫(未完)

(一)用requests发送get请求 安装好pycharm(跳过) 在本地控制台输入pip install requests 安装requests模块 with防止资源浪费 不论f文件有没有执行成功最后都会关闭 请求获取url resp requests.get(url) resp.text获取源代码…

Redis的持久化、主从架构、哨兵高可用架构

目录 1.Redis持久化 1.1 RDB快照 1.2AOF 1.3混合持久化 2.Redis主从架构 2.1主从工作原理 2.1.1全量复制 2.1.2增量复制 3.Redis哨兵高可用架构 3.1哨兵架构模型 3.2哨兵模式的作用 3.3故障转移机制 3.4主节点选举机制 4.Redis管道-pipeline 1.Redis持久化 有两种…

MyBatis-Plus 一、(基础应用)

MyBatis-Plus(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 mybatis 、mybatis-plus 二者区别: MyBatis: 所有SQL语句全部自己写手动解析实…

EPCE-HDR

【GitHub】 【Paper】 摘要 由于相机能力的限制,数字图像通常比真实场景辐射更窄的动态光照范围。为了解决这个问题,高动态范围(HDR)重建被提出,以恢复动态范围,更好的表示真实世界的场景。然而&#xff0c…

haproxy编译安装

一、haproxy简介 HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬…

Ubuntu 22.04中MySQL 8 设置忽略大小

Ubuntu 22.04中MySQL 8 设置忽略大小 一、解决完整流程 //根据官网内容说的大概意思就是不能安装完了修改忽略大小写了,只能在初始化的时候做修改。我用的版本是8.0.39//更新软件包 1、sudo apt update //安装MySQL 如果安装了可以忽略这个步骤 2、sudo apt insta…

【计算机三级-数据库技术】数据库及数据库对象

数据库及数据库对象 第一节 创建及维护数据库 一、SQL server数据库分类 1)系统数据库(系统自动创建): master、msdb、tempdb、model、resource 2)用户数据库 保存与用户业务有关的数据。 二、SQL server数据库组成…

【660线代】线性代数一刷错题整理

线代一阶 2024.8.7日 1. 2. 2024.8.8日 1. 2024.8.9日 1. 2. 3. 2024.8.12日 1. 2. 2024.8.13日 1. 2. 3. 2024.8.15日 1. 2. 3. 4. 5. 6. 线代二阶 2024.8.17日 1. 2. 3. 2024.8.18日 1. 至此,660线性代数部分完成。 祝各位一战成硕!

鸿蒙关于可以实现滚动效果的容器组件的相关知识

一、滚动的用途 生活中,我们在使用各种APP应用的过程中,总是可以看到一些轮播图、内容页面的滑动、组件切换的效果等,这些都是为了提高用户的体验而设计的功能。在编程中,滚动的用途非常广泛,我们经常用在用户界面的交…

Umi-OCR 文字识别工具

免费开源的离线orc识别功能 git地址 感谢大佬的贡献 Umi-OCR 文字识别工具 使用说明 • 下载地址 • 更新日志 • 提交Bug 免费,开源,可批量的离线OCR软件 适用于 Windows7 x64 、Linux x64 免费:本项目所有代码开源&#x…

C++ 程序寻找通过 2 个点的线(Program to find line passing through 2 Points)

在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 P1​(x1​,y1​) 和 P2​(x2​,y2​),我们想要找到通过这两个点的直线方程。 直线方程的形式 直线的方程通常表示为 ymxb,其中 m 是斜率,b 是 …

PMP核心知识点—之项目管理基础

知识点1:项目的临时性 项目的临时性是指项目有明确的开始时间和结束时间,但并不能表示项目的周期短,项目的周期从几个月、几年到几十年都有。 知识点2:项目的独特性 独特的产品、服务或成果。 知识点3:项目创造商业价值…

ARCGIS 纸质小班XY坐标转电子要素面

1、准备好excel 坐标 小班号、点位链接的顺序、X、Y 4个缺一不可,需要注意的是,点位顺序的格式最好为数字,若为其他格式可能会出现排序混乱,会以1-9 11-19等字符串的排序连接。 excel文件转为csv才能识别,CSV只能保留第…

错过了游科的黑神话?别急,国内这些公司也在招聘中,都是做3A游戏的,速来!

近日,由游戏科学工作室打造的3A游戏——《黑神话:悟空》,不仅在国内引起了前所未有的关注,在全球范围内也引发了巨大轰动。 游戏玩家们举国欢庆的同时,无数游戏从业者也点燃了对国产3A游戏的憧憬与期待! 据说游科在某…

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能

Java 通用代码生成器光,电音之王尝鲜版八,完善数据库自动反射功能和多对多候选功能 Java 通用代码生成器光,电音之王尝鲜版八,此版本完善了数据库自动反射功能。完善了多对多候选功能。尝鲜版八在以前的版本上修复了大量缺陷和功…

PDF文件切割,无大小限制

前言 公司让学习一个东西,让写一个学习总结,我想这不是AI的拿手好戏,直接把近100M的PDF喂给他,然后他说吃不下,太大了 小事,那么多在线PDF工具网站,分分钟拆开,然后找了半天也都是…

Java开发笔记-小程序微信支付接入

步骤: 1.注册微信商户,开通小程序支付业务,获得必要接入参数。(Certificate、PrivateKey、merchantId、SerialNumbe、apiV3Key) 2.微信商户号关联小程序(需目标小程序审核) 3.java使用接入参数发起下单,获取下单参数。 4.小程…

新手设计师看一看!2024年PDF转CAD软件TOP4

在现在这个啥都能数字化的时代,文件格式得来回换已经成了我们工作的日常,特别是把PDF转成CAD,对工程师、设计师还有搞建筑的人来说,这事儿特别重要。技术越发展,市面上就出现了好些又快又方便的工具。今天,…

AI+新质生产力,化敌为友的新未来

“新质生产力”是今年的“高频词”。如何将“新质生产力”落到实处,业内纷纷瞄准了同一个关键词:“人工智能”,特别是 “人工智能” ,这个小小的""号代表着无限的可能性。人工智能正在成为现代社会的基础设施&#xff0…