失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python调用讯飞语音合成API接口实现文字转语音 然后转换音频格式

python调用讯飞语音合成API接口实现文字转语音 然后转换音频格式

时间:2023-01-11 00:34:01

相关推荐

python调用讯飞语音合成API接口实现文字转语音 然后转换音频格式

一,注册讯飞账号,并实名制。

讯飞开放平台-以语音交互为核心的人工智能开放平台 ()

二、找到音频合成,按页面提示申请免费试用。

在线语音合成_免费试用-讯飞开放平台 ()

三、申请免费使用后,找到API信息如下:

四、找到开发者文档,仔细阅读

语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心 ()

五、根据开发者文档的python demo代码,加上你的API信息:

# -*- coding:utf-8 -*-## author: iflytek## 本demo测试时运行的环境为:Windows + Python3.7# 本demo测试成功运行时所安装的第三方库及其版本如下:# cffi==1.12.3# gevent==1.4.0# greenlet==0.4.15# pycparser==2.19# six==1.12.0# websocket==0.2.1# websocket-client==0.56.0# 合成小语种需要传输小语种文本、使用小语种发音人vcn、tte=unicode以及修改文本编码方式# 错误码链接:/document/error-code (code返回错误码时必看)# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #import websocketimport datetimeimport hashlibimport base64import hmacimport jsonfrom urllib.parse import urlencodeimport timeimport sslfrom wsgiref.handlers import format_date_timefrom datetime import datetimefrom time import mktimeimport _thread as threadimport osSTATUS_FIRST_FRAME = 0 # 第一帧的标识STATUS_CONTINUE_FRAME = 1 # 中间帧标识STATUS_LAST_FRAME = 2 # 最后一帧的标识class Ws_Param(object):# 初始化def __init__(self, APPID, APIKey, APISecret, Text):self.APPID = APPIDself.APIKey = APIKeyself.APISecret = APISecretself.Text = Text# 公共参数(common)monArgs = {"app_id": self.APPID}# 业务参数(business),更多个性化参数可在官网查看self.BusinessArgs = {"aue": "raw", "auf": "audio/L16;rate=16000", "vcn": "xiaoyan", "tte": "utf8"}self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-8')), "UTF8")}#使用小语种须使用以下方式,此处的unicode指的是 utf16小端的编码方式,即"UTF-16LE"”#self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-16')), "UTF8")}# 生成urldef create_url(self):url = 'wss://tts-/v2/tts'# 生成RFC1123格式的时间戳now = datetime.now()date = format_date_time(mktime(now.timetuple()))# 拼接字符串signature_origin = "host: " + "ws-" + "\n"signature_origin += "date: " + date + "\n"signature_origin += "GET " + "/v2/tts " + "HTTP/1.1"# 进行hmac-sha256进行加密signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),digestmod=hashlib.sha256).digest()signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (self.APIKey, "hmac-sha256", "host date request-line", signature_sha)authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')# 将请求的鉴权参数组合为字典v = {"authorization": authorization,"date": date,"host": "ws-"}# 拼接鉴权参数,生成urlurl = url + '?' + urlencode(v)# print("date: ",date)# print("v: ",v)# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致# print('websocket url :', url)return urldef on_message(ws, message):try:message =json.loads(message)code = message["code"]sid = message["sid"]audio = message["data"]["audio"]audio = base64.b64decode(audio)status = message["data"]["status"]print(message)if status == 2:print("ws is closed")ws.close()if code != 0:errMsg = message["message"]print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))else:with open('./demo.pcm', 'ab') as f:f.write(audio)except Exception as e:print("receive msg,but parse exception:", e)# 收到websocket错误的处理def on_error(ws, error):print("### error:", error)# 收到websocket关闭的处理def on_close(ws):print("### closed ###")# 收到websocket连接建立的处理def on_open(ws):def run(*args):d = {"common": monArgs,"business": wsParam.BusinessArgs,"data": wsParam.Data,}d = json.dumps(d)print("------>开始发送文本数据")ws.send(d)if os.path.exists('./demo.pcm'):os.remove('./demo.pcm')thread.start_new_thread(run, ())if __name__ == "__main__":# 测试时候在此处正确填写相关信息即可运行wsParam = Ws_Param(APPID='你的APPID', APISecret='你的APISecret',APIKey='你的APIKey',Text="轮播广告可在店铺首页展示图片类型的轮播广告,引导用户关注新品爆品、领取优惠券、或是招募推荐官。")websocket.enableTrace(False)wsUrl = wsParam.create_url()ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close)ws.on_open = on_openws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

六、官方demo的代码,默认生成的音频是.pcm格式,如果需要转为wav格式请使用如下方法

import wavedef pcm2wav(pcm_file, wav_file, channels=1, bits=16, sample_rate=16000):# 打开 PCM 文件pcmf = open(pcm_file, 'rb')pcmdata = pcmf.read()pcmf.close()# 打开将要写入的 WAVE 文件wavfile = wave.open(wav_file, 'wb')# 设置声道数wavfile.setnchannels(channels)# 设置采样位宽wavfile.setsampwidth(bits // 8)# 设置采样率wavfile.setframerate(sample_rate)# 写入 data 部分wavfile.writeframes(pcmdata)wavfile.close()if __name__=="__main__":pcm2wav("demo.pcm", "demo.wav")

七、如果你需要将音频转为mp3格式,请使用如下代码将wav格式转为mp3格式。

注意,安装pydub之前需要下载ffmpeg,并将其bin目录添加到环境变量,重启编辑器。

ffmpeg官方网站:FFmpeg,下载速度慢,可用我分享的老版本。

链接:/s/1c-ZpFVcTG9v1ubVSjXcaJQ

提取码:llmm

from pydub import AudioSegmentsong = AudioSegment.from_wav("demo.wav")song.export("wav-mp3.mp3", format="mp3")

八、大家有补充请评论区留言,谢谢!

如果觉得《python调用讯飞语音合成API接口实现文字转语音 然后转换音频格式》对你有帮助,请点赞、收藏,并留下你的观点哦!

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