今天带来的是百度AI的一个语音合成接口,它的主要功能是将接收到的文本内容,转换为音频数据返回。
我实现的大致流程为:
1 - 爬取小说文本内容(本篇不涉及)
2 - 调用百度AI语音合成接口,将文本内容转换为音频数据,并保存到本地文件夹
3 - 获取该文件夹内的文件名
4 - 将所有音频文件合并为一个output音频文件
使用工具:python环境、aip(百度AI)、pydub、os
环境准备:
1. 百度AI语音合成接口的应用创建
- 百度AI官网地址:https://ai.baidu.com/
- 使用语音合成
- 领取免费试用权益
- 创建语音合成应用
2. 在你的python环境中安装第三方库
- 安装百度AI的一个python库 -- aip:pip install baidu-aip
- 安装合并音频文件时,需要用到的库 -- pydub:pip instal pydub
- 下载安装pydub所需要软件依赖 -- FFMPEG官网
我也放到了我的百度云 -- FFMPEG
(链接:https://pan.baidu.com/s/1nfBh4gUJGV-VwOCakBndEQ 提取码:8175)
- 安装FFMPEG后,将FFMPEG的 bin 目录加入系统的环境变量
源码讲解环节
好的,环境都准备好后,下面就是喜闻乐见的源码讲解环节了(´◔౪◔)
百度AI语音合成-小说文字转音频.py
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '' # 你的APPID
API_KEY = '' # 你的API_KEY
SECRET_KEY = '' # 你的SECRET_KEY
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
with open('1.txt', 'r', encoding='utf-8')as file:
flag = 0
while True:
flag += 1
string = file.read(1023)
if not string:
break
# string为需要转化的文字,但最大长度需要小于1024个字节,且编码需要为utf-8
result = client.synthesis(string, 'zh', 1, {
'vol': 7, #音量,取值0-15,默认为5中音量
'spd': 4, #语速,取值0-9,默认为5中语速
'pit': 7, #音调,取值0-9,默认为5中语调
'per': 1, #发声人,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女
})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open(r'video/{}.mp3'.format(str(flag)), 'wb') as f:
f.write(result)
print('第{}段已转化完成....'.format(flag))
# // 成功返回二进制文件流
# // 失败返回
# {
# "err_no":500,
# "err_msg":"notsupport.",
# "sn":"abcdefgh",
# "idx":1
# }
音频拼接.py
from pydub import AudioSegment
import zzzzzz常用方法.获取文件夹下的所有文件名 as a
# 路径
root_files_list = a.file_name(r"F:\桌面\6-python车间\029-百度AI语音合成-小说文字转音频\video")
print(root_files_list)
files_list = []
for i,j in root_files_list.items():
# print(i) # .\\video\\
# print(j) # ['1.mp3', '2.mp3', '3.mp3']
for k in j:
files_list.append(i + '\\' + k)
print(files_list)
# locals() 函数会以字典类型返回当前位置的全部局部变量,相当于就是存放所有变量的表吧,我们可以在这个表里面创建一个字典的key,然后再把他声明为对象
prepare_data = locals()
# 但这里如果导入的文件名有不是mp3后缀的,则会报错,测试时应保证仅有需要拼接的mp3,或者在前面文件名获取的模块进行过滤
# 使用AudioSegment时,需要先设置好ffmpeg的环境变量
output_music = 0
for i in range(len(files_list)):
prepare_data['input_music_' + str(i)] = AudioSegment.from_mp3(files_list[i])
output_music += prepare_data['input_music_' + str(i)]
output_music.export(".\\output_video\\output_music.mp3", format="mp3")
获取文件夹下的所有文件名.py
import os
def file_name(file_dir):
# files_list = []
root_files_list = {}
for root, dirs, files in os.walk(file_dir):
#print(root) # 当前目录路径
#print(dirs) # 当前路径下所有子目录
#print(files) # 当前路径下所有非目录子文件
root_files_list['{}'.format(root)] = files
#返回地址与地址所对应的非目录子文件关系的字典
return root_files_list
# 类似于:{'F:\\桌面\\6-python车间\\029-百度AI语音合成-小说文字转音频\\video': ['1.mp3', '2.mp3', '3.mp3']}
效果展示
蔬菜包我也放到了我的百度云了:蔬菜包
链接:https://pan.baidu.com/s/1Mrwe9AognHgqKURNztwtzQ
提取码:a9xv
那么本次的分享就到这里了,喜欢的话麻烦点赞关注一下;不喜欢的话可以去看下小编的其他文章,肯定有喜欢的;都不喜欢的话可以点个关注,万一以后有喜欢的呢(๑•̀ㅂ•́)و✧
你点了吗◔ ‸◔?