edge-tts微软文本转语音库,来听听这些语音是否很熟悉?

上期图文教程,我们分享了Azure机器学习的文本转语音的账号申请与API申请的详细步骤,也介绍了基于python3实现Azure机器学习文本转语音功能的代码实现过程,虽然我们可以使用Azure账号免费提供一年的试用期,但是毕竟是要付费的,我们的API也无法长期使用,好在微软发布了edge-tts库,此库继承了Azure的文本转语音功能,且是免费使用的,本期我们就介绍一下edge-tts的使用。也许你听到如下生成的声音,你会发现很是熟悉。

Edge-TTS是一个Python库,它使用微软的Azure Cognitive Services来实现文本到语音转换(TTS)。该库提供了一个简单的API,可以将文本转换为语音,并且支持多种语言和声音。要使用Edge-TTS库,首先需要安装上Edge-TTS库,安装直接使用pip 进行安装即可。

pip install edge-tts

这里本期的代码基于python3.9,在自己的cmd窗口中,输入以上安装命令,便会自动安装Edge-TTS

Collecting edge-tts Downloading edge_tts-6.1.3-py3-none-any.whl (26 kB)
Collecting aiohttp>=3.8.0 Downloading aiohttp-3.8.4-cp39-cp39-win_amd64.whl (323 kB)
     |████████████████████████████████| 323 kB 17 kB/s
Collecting aiosignal>=1.1.2 Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Collecting charset-normalizer<4.0,>=2.0 Downloading charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl (97 kB)
     |████████████████████████████████| 97 kB 20 kB/s
Collecting yarl<2.0,>=1.0 Downloading yarl-1.8.2-cp39-cp39-win_amd64.whl (56 kB)
     |████████████████████████████████| 56 kB 20 kB/s
Collecting frozenlist>=1.1.1  Downloading frozenlist-1.3.3-cp39-cp39-win_amd64.whl (34 kB)
Collecting multidict<7.0,>=4.5 Downloading multidict-6.0.4-cp39-cp39-win_amd64.whl (28 kB)
Collecting attrs>=17.3.0 Downloading attrs-22.2.0-py3-none-any.whl (60 kB)
     |████████████████████████████████| 60 kB 20 kB/s
Collecting async-timeout<5.0,>=4.0.0a3  Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting idna>=2.0  Using cached idna-3.4-py3-none-any.whl (61 kB)
Installing collected packages: frozenlist, aiosignal, charset-normalizer, multidict, idna, yarl, attrs, async-timeout, aiohttp, edge-tts
Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 attrs-22.2.0 charset-normalizer-3.1.0 edge-tts-6.1.3 frozenlist-1.3.3 idna-3.4 multidict-6.0.4 yarl-1.8.2

安装完成后,我们可以输入edge-tts,若cmd窗口中输出提示信息,说明已经安装完成。

usage: edge-tts [-h] [-t TEXT] [-f FILE] [-v VOICE] [-l] [--rate RATE] [--volume VOLUME] [-O OVERLAPPING]
                [--write-media WRITE_MEDIA] [--write-subtitles WRITE_SUBTITLES] [--proxy PROXY]
edge-tts: error: one of the arguments -t/--text -f/--file -l/--list-voices is required

如果要直接在cmd命令行中使用Edge-TTS,我们只需要使用如下命令来运行即可

edge-tts --text "Hello, world!" --write-media hello.mp3

以上运行完成后,便会在本地生成一个hello.mp3的音频文件,但是这里是默认的语音,我们需要改变语音,来实现符合自己要求的语音,且默认的语音只支持英文。

我们可以直接在cmd窗口中输入如下命令行来查看edge-tts支持的语音

edge-tts --list-voices
Name: af-ZA-AdriNeural Gender: Female
........
........
........
Name: zh-CN-XiaoxiaoNeural Gender: Female
Name: zh-CN-XiaoyiNeural Gender: Female
Name: zh-CN-YunjianNeural Gender: Male
Name: zh-CN-YunxiNeural Gender: Male
Name: zh-CN-YunxiaNeural Gender: Male
Name: zh-CN-YunyangNeural Gender: Male
Name: zh-CN-liaoning-XiaobeiNeural Gender: Female
Name: zh-CN-shaanxi-XiaoniNeural Gender: Female
Name: zh-HK-HiuGaaiNeural Gender: Female
Name: zh-HK-HiuMaanNeural Gender: Female
Name: zh-HK-WanLungNeural Gender: Male
Name: zh-TW-HsiaoChenNeural Gender: Female
Name: zh-TW-HsiaoYuNeural Gender: Female
Name: zh-TW-YunJheNeural Gender: Male
Name: zu-ZA-ThandoNeural Gender: Female
Name: zu-ZA-ThembaNeural Gender: Male

这里会打印出来所有支持的语音,字母zh开头的便是支持中文的语音,我们使用zh-CN-YunxiNeural,来听听zh-CN-YunxiNeural生成的语音,你不是听过。这里我们只需要添加--voice命令,来指定输出的语音。

edge-tts --voice zh-CN-YunxiNeural --text "hello 大家好,这里是人工智能研究所" --write-media hello.mp3

命令行执行完成后,我们可以从cmd命令行中看到,不仅edge-tts可以生成语音,还特意生成了字母文件,我们可以把这些字幕输入到视频剪辑文件中,就可以自动添加字幕了。

WEBVTT
00:00:00.100 --> 00:00:00.700
hello
00:00:00.800 --> 00:00:01.075
大家
00:00:01.075 --> 00:00:01.387
好
00:00:01.712 --> 00:00:02.000
这里
00:00:02.000 --> 00:00:02.237
是
00:00:02.263 --> 00:00:02.850
人工智能
00:00:02.862 --> 00:00:03.350
研究所

当然edge-tts还支持调整语速与音量,我们只需要添加rate与volume指令

edge-tts --voice zh-CN-YunxiNeural --rate=-4% --text "hello 大家好,这里是人工智能研究所" --write-media hello1.mp3
edge-tts --voice zh-CN-YunxiNeural --volume=-4% --text "hello 大家好,这里是人工智能研究所" --write-media hello1.mp3

rate=-4% 意思是语速降低4%,volume=-4%意思是音量降低4%,当然若是加号,便是增加多少。

当然,以上是在CMD命令行中执行的指令,我们也可以使用python进行批量文本转语音

import edge_tts
import asyncio
TEXT = ""
with open ('1.txt','rb') as f:
    data = f.read()
    TEXT = data.decode('utf-8')
print(TEXT)
voice = 'zh-CN-YunxiNeural'
output = '4.mp3'
rate = '-4%'
volume = '+0%'
async def my_function():
    tts = edge_tts.Communicate(text = TEXT,voice = voice,rate = rate,volume=volume)
    await tts.save(output)
if __name__ == '__main__':
    asyncio.run(my_function())

首先我们导入edge_tts与asyncio库,并使用with open函数打开一个txt文件。txt便是我们要生成语音的文本文件。这里我们一般是输入的中文,因此,这里我们使用rb读取文件,然后通过decode函数转换一下,避免类似如下的问题

'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence

然后我们定义好我们输入的5个参数

然后我们使用async进行异步请求,若是直接运行,会提示如下错误,因此,我们需要使用异步处理的方式。

RuntimeWarning: coroutine 'Communicate.save' was never awaited
  tts.save(output)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
https://github.com/rany2/edge-tts 项目文件地址

NLP领域最近越来越火,特别是ChatGPT的流行开始,NLP领域一举打破了CV领域,让更多的人看到了人工智能的魅力,这里介绍一下transformer模型,其NLP领域必然绕不开的一个模型。

展开阅读全文

页面更新:2024-04-14

标签:微软   语音   文本   语速   人工智能   音量   命令   研究所   领域   文件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top