摘要:所以這次總結一下在中使用訊飛進行語音合成的過程。最后需要將配置參數編碼為字符串字典類型明文字符串編碼字符串,具體實現可以參考代碼。返回值的具體說明請參考返回值語音合成。
前幾日訊飛開放平臺推出了WebAPI接口,恰好最近需要實現一個文字轉語音的功能,于是就嘗試著用了起來。但不知什么原因,官方文檔的調用示例一直報錯,最后自己照著示例的思路用python3重寫了一遍。所以這次總結一下在Python中使用訊飛Web API進行語音合成的過程。
注冊訊飛開放平臺首先注冊訊飛開放平臺:http://passport.xfyun.cn/regi...
注冊完成后進入控制臺,在控制臺創建一個新應用 ,填寫一些基本信息,注意 應用平臺 選擇 WebAPI 。
創建完成后,記錄下 APPID 和 APIKey ,將在程序中用到。
另外,請在 IP白名單 中添加自己的外網IP,可以在http://www.ip138.com/ 查看。(一般來說外網IP會常常發生變化,請注意)
在Python3中使用訊飛Web API先上代碼,后面進行必要的說明:
可能提示缺庫:pip3 install requests
* 使用python3執行
import base64 import json import time import hashlib import requests # API請求地址、API KEY、APP ID等參數,提前填好備用 api_url = "http://api.xfyun.cn/v1/service/v1/tts" API_KEY = "替換成你的APIKEY" APP_ID = "替換成你的APPID" OUTPUT_FILE = "C://output.mp3" # 輸出音頻的保存路徑,請根據自己的情況替換 TEXT = "茍利國家生死以,豈因禍福避趨之" # 構造輸出音頻配置參數 Param = { "auf": "audio/L16;rate=16000", #音頻采樣率 "aue": "lame", #音頻編碼,raw(生成wav)或lame(生成mp3) "voice_name": "xiaoyan", "speed": "50", #語速[0,100] "volume": "77", #音量[0,100] "pitch": "50", #音高[0,100] "engine_type": "aisound" #引擎類型。aisound(普通效果),intp65(中文),intp65_en(英文) } # 配置參數編碼為base64字符串,過程:字典→明文字符串→utf8編碼→base64(bytes)→base64字符串 Param_str = json.dumps(Param) #得到明文字符串 Param_utf8 = Param_str.encode("utf8") #得到utf8編碼(bytes類型) Param_b64 = base64.b64encode(Param_utf8) #得到base64編碼(bytes類型) Param_b64str = Param_b64.decode("utf8") #得到base64字符串 # 構造HTTP請求的頭部 time_now = str(int(time.time())) checksum = (API_KEY + time_now + Param_b64str).encode("utf8") checksum_md5 = hashlib.md5(checksum).hexdigest() header = { "X-Appid": APP_ID, "X-CurTime": time_now, "X-Param": Param_b64str, "X-CheckSum": checksum_md5 } # 發送HTTP POST請求 def getBody(text): data = {"text":text} return data response = requests.post(api_url, data=getBody(TEXT), headers=header) # 讀取結果 response_head = response.headers["Content-Type"] if(response_head == "audio/mpeg"): out_file = open(OUTPUT_FILE, "wb") data = response.content # a "bytes" object out_file.write(data) out_file.close() print("輸出文件: " + OUTPUT_FILE) else: print(response.read().decode("utf8"))
下面按照代碼順序進行各部分的說明。
APIKey等參數在代碼開頭填好各項參數,方面代碼中使用。
API_KEY和APP_ID請替換為上一步創建應用后得到的內容。請不要刪除雙引號。
OUTPUT_FILE是最終輸出音頻的保存路徑,根據自己的情況替換。
TEXT是將要輸出為語音的文本。
音頻配置參數Param 是字典格式的音頻配置參數,其中 "aue" 可選 raw (生成wav)或 lame (生成mp3),如果修改成raw請記得同時修改輸出文件的擴展名。
最后需要將配置參數編碼為Base64字符串:字典類型→明文字符串→utf8編碼→Base64(bytes)→Base64字符串,具體實現可以參考代碼。
音頻配置參數的詳細說明可以參考請求參數 | 語音合成 。
HTTP請求頭部根據 授權認證 | 科大訊飛RESET_API開發指南 ,在調用所有業務接口時,都需要在HTTP請求頭部中配置以下參數用于授權認證:
參數 | 格式 | 說明 |
---|---|---|
X-Appid | string | 訊飛開放平臺注冊申請應用的應用ID(appid) |
X-CurTime | string | 當前UTC時間戳,從1970年1月1日0點0 分0 秒開始到現在的秒數 |
X-Param | string | 音頻配置參數JSON串經Base64編碼后的字符串 |
X-CheckSum | string | 令牌,計算方法:MD5(apiKey + curTime + param)。三個值拼接的字符串,進行MD5哈希計算(32位小寫)。 |
具體實現參考代碼中字典 header 。
發送請求&讀取結果最后使用requests庫發送HTTP POST請求,得到結果。根據響應的 header 可以判斷是否合成成功。
若響應頭部包含Content-type: audio/mpeg,則響應Body為音頻數據,可寫入文件保存。
若合成出現錯誤,響應頭部包含Content-type: text/plain,響應Body為記載了錯誤類型的json字符串。
返回值的具體說明請參考 返回值 | 語音合成 。
運行結果使用幾次后,感覺合成語音的斷句做得不是很優秀,但響應速度很快,還是比較滿意的。
output.mp3
小結最近使用了幾種Web API,對這類API的使用方法也算是有些經驗了。最后,現在語音識別、圖靈機器人、語音合成都試著做了一遍,下一篇博客將把他們組合起來,實現一個簡單的語音助手。
感謝你閱讀文章!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44660.html
摘要:最后,現在時間是年月日到目前為止科大訊飛的不支持客戶端和服務端分開的情況,也就是說,語音合成是在服務端的話筒的播放,語音識別需要服務端的麥克風錄音,,對于沒有任何卵用。 首先登陸科大訊飛開發者平臺,注冊賬號,(走你->http://www.xfyun.cn/)可以根據功能(語音識別,語音播放等),平臺(java,window等),來創建屬于自己的應用。應用創建成功后對有一個對應的app...
摘要:科大訊飛的語音識別客戶端提供了下的語言,卻沒有的。有了,我們就可以很輕松的用來使用科大訊飛的語音識別了。通過函數加載動態庫在里面調用函數時主要是注意參數的類型。 ctypes 是 Python 的一個模塊,它提供了C語言相關的數據類型,可以方便的調用C語言編寫的DLL(Windows 動態鏈接庫)和so(Linux動態鏈接庫)。科大訊飛的語音識別客戶端SDK提供了Linux下的C語言S...
摘要:一背景作為一名前端同學有時候感覺挺可憐的,復雜的操作都依賴后端同學在服務器端完成。 一、背景 作為一名前端同學有時候感覺挺可憐的,復雜的操作都依賴后端同學在服務器端完成。那么,有一天我們自己想玩一個新技術或者后端同學不搭理我們,怎么辦?絕望中..... 二、小程序語音識別 接到這個需求,我們明確兩個問題: 小程序錄音支持什么格式 由小程序文檔可知:只支持 mp3格式和 aac格式微信...
摘要:前不久寫了個工具型微信小程序周邊,里面用到了語音識別技術。當然如果你要兼容低端微信用戶需要使用做兼容處理。如果發現不當之處歡迎微信交流。想看實際案例的可以微信掃碼關于安裝關于安裝關于安裝 前不久寫了個工具型微信小程序(Find周邊),里面用到了語音識別技術。現將實現細節整理如下: 接口預覽 通過閱讀了解科大訊飛接口文檔、小程序接口開發文檔以及對后端ThinkPhp框架的學習,我整理...
摘要:前不久寫了個工具型微信小程序周邊,里面用到了語音識別技術。當然如果你要兼容低端微信用戶需要使用做兼容處理。如果發現不當之處歡迎微信交流。想看實際案例的可以微信掃碼關于安裝關于安裝關于安裝 前不久寫了個工具型微信小程序(Find周邊),里面用到了語音識別技術。現將實現細節整理如下: 接口預覽 通過閱讀了解科大訊飛接口文檔、小程序接口開發文檔以及對后端ThinkPhp框架的學習,我整理...
閱讀 1428·2021-11-15 11:38
閱讀 3577·2021-11-09 09:47
閱讀 1976·2021-09-27 13:36
閱讀 3222·2021-09-22 15:17
閱讀 2560·2021-09-13 10:27
閱讀 2871·2019-08-30 15:44
閱讀 1180·2019-08-27 10:53
閱讀 2712·2019-08-26 14:00