• 欢迎访问佰阅部落
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

如何使用Python+阿里云智能语音合成博客音频

人工智能 佰阅 3年前 (2020-06-23) 3905次浏览 0个评论

智能语音合成哪家强?就本站的经验而言,在中文语音合方面,挨个尝试了讯飞、百度、阿里云、腾讯,说实话没有对比就没有伤害。根据好听度、使用便捷性和现已采用数量来看,阿里云语音目前是做的最完善的。下面具体来解释下。

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函数里的参数就行。笔者最喜欢SiyueAixia了,一个大气温婉,一个亲近和气。语速建议取-200左右。

5.关于token失效问题

这个是非常致命的,本站就中途失败过一次,网页获取的token会提示有效期,但是没有显示具体到期时间,这样下次到期也不清楚啥时候发送,就会导致自动化脚本失效。好在阿里云提供了获取token的脚本,在判断文件失效后,还可以主动调用,参考获取token。

6.如何将分割的文本语音包合并?

这个使用pydub即可,非常方便进行音频文件的分割、合并、格式转换等。

7.如何写好文章,自动上传博客里?

可以用python编写一个脚本,实现所有过程自动化处理。本篇文章就是这种方式来的,写好文稿,最后脚本自动添加水印、上传、CDN替换、语音合成及上传、文章发布一气呵成。哪怕用代码实现其中一小步,都比个人手动操作完成要高效,所以写文章的人,还是推荐写个脚本来帮助自己执行机械过化的过程。

4.启发

阿里云语音包里,有些方言,儿童音等,听着也很舒服,以儿童音为例,或许可以搞一个儿童语音故事网站,将儿童故事,按章节合成语音。类似的,除了文本转语音之外,语音识别则可以轻松的给中文视频添加字母,英文的合成识别,谷歌已经做的很好了,基本无需过多说明,YouTube的实时字幕就是很好的例子。


佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何使用Python+阿里云智能语音合成博客音频
喜欢 (3)

您必须 登录 才能发表评论!