亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

在Python中使用科大訊飛Web API進(jìn)行語音合成

Eminjannn / 1946人閱讀

摘要:所以這次總結(jié)一下在中使用訊飛進(jìn)行語音合成的過程。最后需要將配置參數(shù)編碼為字符串字典類型明文字符串編碼字符串,具體實(shí)現(xiàn)可以參考代碼。返回值的具體說明請參考返回值語音合成。

前幾日訊飛開放平臺推出了WebAPI接口,恰好最近需要實(shí)現(xiàn)一個(gè)文字轉(zhuǎn)語音的功能,于是就嘗試著用了起來。但不知什么原因,官方文檔的調(diào)用示例一直報(bào)錯(cuò),最后自己照著示例的思路用python3重寫了一遍。所以這次總結(jié)一下在Python中使用訊飛Web API進(jìn)行語音合成的過程。

注冊訊飛開放平臺

首先注冊訊飛開放平臺:http://passport.xfyun.cn/regi...

注冊完成后進(jìn)入控制臺,在控制臺創(chuàng)建一個(gè)新應(yīng)用 ,填寫一些基本信息,注意 應(yīng)用平臺 選擇 WebAPI 。

創(chuàng)建完成后,記錄下 APPIDAPIKey ,將在程序中用到。

另外,請?jiān)?IP白名單 中添加自己的外網(wǎng)IP,可以在http://www.ip138.com/ 查看。(一般來說外網(wǎng)IP會常常發(fā)生變化,請注意)

在Python3中使用訊飛Web API

先上代碼,后面進(jìn)行必要的說明:

可能提示缺庫:pip3 install requests

* 使用python3執(zhí)行

import base64
import json
import time
import hashlib
import requests

# API請求地址、API KEY、APP ID等參數(shù),提前填好備用
api_url = "http://api.xfyun.cn/v1/service/v1/tts"
API_KEY = "替換成你的APIKEY"
APP_ID = "替換成你的APPID"
OUTPUT_FILE = "C://output.mp3"    # 輸出音頻的保存路徑,請根據(jù)自己的情況替換
TEXT = "茍利國家生死以,豈因禍福避趨之"

# 構(gòu)造輸出音頻配置參數(shù)
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(英文)
}
# 配置參數(shù)編碼為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字符串

# 構(gòu)造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
}

# 發(fā)送HTTP POST請求
def getBody(text):
    data = {"text":text}
    return data
response = requests.post(api_url, data=getBody(TEXT), headers=header)

# 讀取結(jié)果
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"))

下面按照代碼順序進(jìn)行各部分的說明。

APIKey等參數(shù)

在代碼開頭填好各項(xiàng)參數(shù),方面代碼中使用。

API_KEY和APP_ID請?zhí)鎿Q為上一步創(chuàng)建應(yīng)用后得到的內(nèi)容。請不要刪除雙引號

OUTPUT_FILE是最終輸出音頻的保存路徑,根據(jù)自己的情況替換。

TEXT是將要輸出為語音的文本。

音頻配置參數(shù)

Param 是字典格式的音頻配置參數(shù),其中 "aue" 可選 raw (生成wav)或 lame (生成mp3),如果修改成raw請記得同時(shí)修改輸出文件的擴(kuò)展名。

最后需要將配置參數(shù)編碼為Base64字符串:字典類型→明文字符串→utf8編碼→Base64(bytes)→Base64字符串,具體實(shí)現(xiàn)可以參考代碼。

音頻配置參數(shù)的詳細(xì)說明可以參考請求參數(shù) | 語音合成 。

HTTP請求頭部

根據(jù) 授權(quán)認(rèn)證 | 科大訊飛RESET_API開發(fā)指南 ,在調(diào)用所有業(yè)務(wù)接口時(shí),都需要在HTTP請求頭部中配置以下參數(shù)用于授權(quán)認(rèn)證:

參數(shù) 格式 說明
X-Appid string 訊飛開放平臺注冊申請應(yīng)用的應(yīng)用ID(appid)
X-CurTime string 當(dāng)前UTC時(shí)間戳,從1970年1月1日0點(diǎn)0 分0 秒開始到現(xiàn)在的秒數(shù)
X-Param string 音頻配置參數(shù)JSON串經(jīng)Base64編碼后的字符串
X-CheckSum string 令牌,計(jì)算方法:MD5(apiKey + curTime + param)。三個(gè)值拼接的字符串,進(jìn)行MD5哈希計(jì)算(32位小寫)。

具體實(shí)現(xiàn)參考代碼中字典 header

發(fā)送請求&讀取結(jié)果

最后使用requests庫發(fā)送HTTP POST請求,得到結(jié)果。根據(jù)響應(yīng)的 header 可以判斷是否合成成功。

若響應(yīng)頭部包含Content-type: audio/mpeg,則響應(yīng)Body為音頻數(shù)據(jù),可寫入文件保存。

若合成出現(xiàn)錯(cuò)誤,響應(yīng)頭部包含Content-type: text/plain,響應(yīng)Body為記載了錯(cuò)誤類型的json字符串。

返回值的具體說明請參考 返回值 | 語音合成 。

運(yùn)行結(jié)果

使用幾次后,感覺合成語音的斷句做得不是很優(yōu)秀,但響應(yīng)速度很快,還是比較滿意的。

output.mp3

小結(jié)

最近使用了幾種Web API,對這類API的使用方法也算是有些經(jīng)驗(yàn)了。最后,現(xiàn)在語音識別、圖靈機(jī)器人、語音合成都試著做了一遍,下一篇博客將把他們組合起來,實(shí)現(xiàn)一個(gè)簡單的語音助手。

感謝你閱讀文章!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44660.html

相關(guān)文章

  • 科大訊飛語音識別和語音播放dome

    摘要:最后,現(xiàn)在時(shí)間是年月日到目前為止科大訊飛的不支持客戶端和服務(wù)端分開的情況,也就是說,語音合成是在服務(wù)端的話筒的播放,語音識別需要服務(wù)端的麥克風(fēng)錄音,,對于沒有任何卵用。 首先登陸科大訊飛開發(fā)者平臺,注冊賬號,(走你->http://www.xfyun.cn/)可以根據(jù)功能(語音識別,語音播放等),平臺(java,window等),來創(chuàng)建屬于自己的應(yīng)用。應(yīng)用創(chuàng)建成功后對有一個(gè)對應(yīng)的app...

    KitorinZero 評論0 收藏0
  • Python用ctypes調(diào)用動態(tài)庫的方式使用科大訊飛語音識別

    摘要:科大訊飛的語音識別客戶端提供了下的語言,卻沒有的。有了,我們就可以很輕松的用來使用科大訊飛的語音識別了。通過函數(shù)加載動態(tài)庫在里面調(diào)用函數(shù)時(shí)主要是注意參數(shù)的類型。 ctypes 是 Python 的一個(gè)模塊,它提供了C語言相關(guān)的數(shù)據(jù)類型,可以方便的調(diào)用C語言編寫的DLL(Windows 動態(tài)鏈接庫)和so(Linux動態(tài)鏈接庫)??拼笥嶏w的語音識別客戶端SDK提供了Linux下的C語言S...

    andycall 評論0 收藏0
  • 微信小程序--------語音識別(前端自己也能玩)

    摘要:一背景作為一名前端同學(xué)有時(shí)候感覺挺可憐的,復(fù)雜的操作都依賴后端同學(xué)在服務(wù)器端完成。 一、背景 作為一名前端同學(xué)有時(shí)候感覺挺可憐的,復(fù)雜的操作都依賴后端同學(xué)在服務(wù)器端完成。那么,有一天我們自己想玩一個(gè)新技術(shù)或者后端同學(xué)不搭理我們,怎么辦?絕望中..... 二、小程序語音識別 接到這個(gè)需求,我們明確兩個(gè)問題: 小程序錄音支持什么格式 由小程序文檔可知:只支持 mp3格式和 aac格式微信...

    omgdog 評論0 收藏0
  • 小程序?qū)崿F(xiàn)語音識別到底要填多少坑?

    摘要:前不久寫了個(gè)工具型微信小程序周邊,里面用到了語音識別技術(shù)。當(dāng)然如果你要兼容低端微信用戶需要使用做兼容處理。如果發(fā)現(xiàn)不當(dāng)之處歡迎微信交流。想看實(shí)際案例的可以微信掃碼關(guān)于安裝關(guān)于安裝關(guān)于安裝 前不久寫了個(gè)工具型微信小程序(Find周邊),里面用到了語音識別技術(shù)?,F(xiàn)將實(shí)現(xiàn)細(xì)節(jié)整理如下: 接口預(yù)覽 通過閱讀了解科大訊飛接口文檔、小程序接口開發(fā)文檔以及對后端ThinkPhp框架的學(xué)習(xí),我整理...

    Benedict Evans 評論0 收藏0
  • 小程序?qū)崿F(xiàn)語音識別到底要填多少坑?

    摘要:前不久寫了個(gè)工具型微信小程序周邊,里面用到了語音識別技術(shù)。當(dāng)然如果你要兼容低端微信用戶需要使用做兼容處理。如果發(fā)現(xiàn)不當(dāng)之處歡迎微信交流。想看實(shí)際案例的可以微信掃碼關(guān)于安裝關(guān)于安裝關(guān)于安裝 前不久寫了個(gè)工具型微信小程序(Find周邊),里面用到了語音識別技術(shù)?,F(xiàn)將實(shí)現(xiàn)細(xì)節(jié)整理如下: 接口預(yù)覽 通過閱讀了解科大訊飛接口文檔、小程序接口開發(fā)文檔以及對后端ThinkPhp框架的學(xué)習(xí),我整理...

    gaara 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<