第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > php文本转语音mp3api源代码 小说文本转音频(百度AI语音合成接口)

php文本转语音mp3api源代码 小说文本转音频(百度AI语音合成接口)

时间:2023-07-22 21:00:29

相关推荐

php文本转语音mp3api源代码 小说文本转音频(百度AI语音合成接口)

今天带来的是百度AI的一个语音合成接口,它的主要功能是将接收到的文本内容,转换为音频数据返回。

我实现的大致流程为:

1 - 爬取小说文本内容(本篇不涉及)

2 - 调用百度AI语音合成接口,将文本内容转换为音频数据,并保存到本地文件夹

3 - 获取该文件夹内的文件名

4 - 将所有音频文件合并为一个output音频文件

使用工具:python环境、aip(百度AI)、pydub、os

环境准备:

1. 百度AI语音合成接口的应用创建

- 使用语音合成

- 领取免费试用权益

- 创建语音合成应用

2. 在你的python环境中安装第三方库

- 安装百度AI的一个python库 -- aip:pip install baidu-aip

- 安装合并音频文件时,需要用到的库 -- pydub:pip instal pydub

- 下载安装pydub所需要软件依赖 -- FFMPEG官网

- 安装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']}

效果展示

蔬菜包我也放到了我的百度云了:蔬菜包

链接:/s/1Mrwe9AognHgqKURNztwtzQ

提取码:a9xv

那么本次的分享就到这里了,喜欢的话麻烦点赞关注一下;不喜欢的话可以去看下小编的其他文章,肯定有喜欢的;都不喜欢的话可以点个关注,万一以后有喜欢的呢(๑•̀ㅂ•́)و✧

你点了吗◔ ‸◔?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。