智能语音合成哪家强?就本站的经验而言,在中文语音合方面,挨个尝试了讯飞、百度、阿里云、腾讯,说实话没有对比就没有伤害。根据好听度、使用便捷性和现已采用数量来看,阿里云语音目前是做的最完善的。下面具体来解释下。
0.语音合成现状如何?
语音合成、识别这是人工智能领域必备的技术,稳定合成语音自然流畅,近乎真人发声,受众评判也是非常容易区分的,就看谁合成的语音很像真人,这点各大厂语音相互对比下就知晓。那阿里云智能语音合成就是最好的吗?其实也不是,笔者以前看过一篇语音合成评测的文章,有一家的语音比阿里云还真实,只不过现在不记得了,也找不着文章。不过缺陷是没有开放的API可供大众使用,面向企业用户,因此普通受众无法使用。
1.语音合成应用范围有哪些?
信息媒介发展至今,短信验证码是我们最常见的一种验证方式,如果换语音验证是否好点?现在5g技术大规模应用后,未来的视频验证或许很快到来。因此,从文本到语音,应用范围就非常广泛了,以自媒体为例,在语音这块,我们只需要编辑文本稿件,最后自动合成语音就行,中途可以随时编辑,合成速度也是按秒计算的,这样就可以实现个人自媒体轻松制作超好听的语音了。如果你懂点python编程,甚至可以实现自动化合成与发布,比如本站目前的文章及音频,都是写好初稿后,利用CMD+python脚本一键完成的。
2.如何使用python调用阿里云语音合成接口?
为啥使用python? 因为python入门简单,学习阶梯很低,越写越容易上手。其适用范围是最广的,在Windows下使用也是非常方便,直接从微软商店安装python即可。
在使用python之前,先来看下阿里云语音合成需要准备些什么?以及需要哪些参数?
首先登陆阿里云,找找语音合成,然后点击开通,默认是3个月免费试用期。
然后获取token,
接着在左侧全部项目里,创建一个语音合成的应用,名称和描述可随意,项目不要提交发布,然后获得第二个参数appkey
这样网页就操作完毕了,需要调试语音的,可以打开项目功能配置,临时调试语音、发音人、音调、语速等
下面介绍具体代码实现:
1.下载 Python SDK链接
安装,在SDK目录执行以下命令:
# 安装
python setup.py install
完成后会在目录下生成ali_speech
的python库,这个文件夹可以复制到你要用的项目文件夹下,就可以调用了。
然后新建阿里云demo.py文件,粘贴下面的代码:
# -*- coding: utf-8 -*-
import threading
import ali_speech
from ali_speech.callbacks import SpeechSynthesizerCallback
from ali_speech.constant import TTSFormat
from ali_speech.constant import TTSSampleRate
class MyCallback(SpeechSynthesizerCallback):
# 参数name用于指定保存音频的文件
def __init__(self, name):
self._name = name
self._fout = open(name, 'wb')
def on_binary_data_received(self, raw):
print('MyCallback.on_binary_data_received: %s' % len(raw))
self._fout.write(raw)
def on_completed(self, message):
print('MyCallback.OnRecognitionCompleted: %s' % message)
self._fout.close()
def on_task_failed(self, message):
print('MyCallback.OnRecognitionTaskFailed-task_id:%s, status_text:%s' % (
message['header']['task_id'], message['header']['status_text']))
self._fout.close()
def on_channel_closed(self):
print('MyCallback.OnRecognitionChannelClosed')
def process(client, appkey, token, text, audio_name):
callback = MyCallback(audio_name)
synthesizer = client.create_synthesizer(callback, "ws://nls-gateway-ap-southeast-1.aliyuncs.com/ws/v1")
synthesizer.set_appkey(appkey)
synthesizer.set_token(token)
synthesizer.set_voice('xiaoyun')
synthesizer.set_text(text)
synthesizer.set_format(TTSFormat.WAV)
synthesizer.set_sample_rate(TTSSampleRate.SAMPLE_RATE_16K)
synthesizer.set_volume(50)
synthesizer.set_speech_rate(0)
synthesizer.set_pitch_rate(0)
try:
ret = synthesizer.start()
if ret < 0:
return ret
synthesizer.wait_completed()
except Exception as e:
print(e)
finally:
synthesizer.close()
def process_multithread(client, appkey, token, number):
thread_list = []
for i in range(0, number):
text = "这是线程" + str(i) + "的合成。"
audio_name = "sy_audio_" + str(i) + ".wav"
thread = threading.Thread(target=process, args=(client, appkey, token, text, audio_name))
thread_list.append(thread)
thread.start()
for thread in thread_list:
thread.join()
if __name__ == "__main__":
client = ali_speech.NlsClient()
# 设置输出日志信息的级别:DEBUG、INFO、WARNING、ERROR
client.set_log_level('INFO')
appkey = '您的appkey'
token = '您的token'
text = "今天是周一,天气挺好的。" #这里是要转换的文本,最大300字符
audio_name = 'sy_audio.wav'
process(client, appkey, token, text, audio_name)
# 多线程示例
# process_multithread(client, appkey, token, 2)
然后结尾处,修改你的appkey和token,就是第一步网页上获取到的参数。然后运行就可以合成语音文件。
3.阿里云语音包使用须知
1.关于字符不过300字符:
具体可以参考官方文档,很详细,每次提交字符长度不超过300,超过的部分不会被合成。因此,笔者的解决办法是将文本进行分割(以文章句号分割),以295个字符为一个集合,就可以解决该问题。最后就是一个文本列表,遍历合成下就行。
2. 关于并发:
免费试用期间,最大两个并发,以本站如何使用Windows Termial:试试三窗口、多标签、毛玻璃第一篇语音合成为例,耗时26s。然后我还有一个阿里云账号,因此也获得了一个免费的,最后两账号并发,合成用时为15s。不过好景不长,现有账户下已过试用期,因此第二天合成是就提示过期。无奈只好去开通商用版。商用版最大200并发,而我则是依据文章列表长度设置的并发,现在一般每篇耗时10s。
3.关于商用费用:
官方介绍两种计费模式,后付费是3.5元/千次;预付费是1.8元/千次,不过让人以外的是,等你去开预付费包的时候,按年付费1476元,含1000千次调用。那么计算下,本站博文长度按1800字每篇计算,每次调用6次接口,全年发布120篇文章为例的话,也就是720次,还不到千次,所以后付费使用一年,费用不到3.5元。这里为啥不用长文本语音合成?稍微算下就知道还是这种短文本最便宜。
4.关于参数调整
具体参考官方文档,然后网站体验之后,修改process
函数里的参数就行。笔者最喜欢Siyue
和Aixia
了,一个大气温婉,一个亲近和气。语速建议取-200
左右。
5.关于token失效问题
这个是非常致命的,本站就中途失败过一次,网页获取的token会提示有效期,但是没有显示具体到期时间,这样下次到期也不清楚啥时候发送,就会导致自动化脚本失效。好在阿里云提供了获取token的脚本,在判断文件失效后,还可以主动调用,参考获取token。
6.如何将分割的文本语音包合并?
这个使用pydub
即可,非常方便进行音频文件的分割、合并、格式转换等。
7.如何写好文章,自动上传博客里?
可以用python编写一个脚本,实现所有过程自动化处理。本篇文章就是这种方式来的,写好文稿,最后脚本自动添加水印、上传、CDN替换、语音合成及上传、文章发布一气呵成。哪怕用代码实现其中一小步,都比个人手动操作完成要高效,所以写文章的人,还是推荐写个脚本来帮助自己执行机械过化的过程。
4.启发
阿里云语音包里,有些方言,儿童音等,听着也很舒服,以儿童音为例,或许可以搞一个儿童语音故事网站,将儿童故事,按章节合成语音。类似的,除了文本转语音之外,语音识别则可以轻松的给中文视频添加字母,英文的合成识别,谷歌已经做的很好了,基本无需过多说明,YouTube的实时字幕就是很好的例子。