一、目標(biāo):
為了更方便查看題目,我們加入讀題功能。語音讀題主要應(yīng)用在智能客服機(jī)器人、電子有聲讀物、智慧教育等領(lǐng)域,了解到目前市場語音合成技術(shù),主要有訊飛語音、百度語音、騰訊語音這幾家大廠。 都支持男女生聲,訊飛價格比較貴,這里發(fā)現(xiàn)騰訊語音合成暫時不收費。
騰訊云的語言合成介紹
https://cloud.tencent.com/product/tts#scenarios
摘選:語音合成(Text To Speech)滿足已知文本生成語音的需求,打通人機(jī)交互閉環(huán)。多種音色選擇,支持自定義音量、語速,為企業(yè)客戶提供定制自有領(lǐng)域詞庫和個性化發(fā)音人服務(wù),讓發(fā)音更自然、更專業(yè)、更符合場景需求。語音合成廣泛應(yīng)用于語音導(dǎo)航、有聲讀物、標(biāo)準(zhǔn)發(fā)音領(lǐng)讀、自動新聞播報等場景。
本以為這些API廠商,直接提供了API接口,小程序里請求就好了,現(xiàn)實不是的,做法跟做微信支付有點類似。必須自己實現(xiàn)一套服務(wù)端API,服務(wù)端實現(xiàn)接口加密等操作。
這幾家都需要這樣做,這里首先把需要的資料準(zhǔn)備好。
- 開發(fā)語言 這里選Golang,官方有服務(wù)端SDK
- 騰訊云API密匙,自己在控制臺查看并記錄
- 開發(fā)文檔地址:https://cloud.tencent.com/document/api/441/18086
- 選一臺服務(wù)器,備案好域名,配置好https
二、編寫代碼
1.路由
beego.Router("/1/textToVoice", &controllers.CloudController{}, "post:TextToVoice")
2.控制器
func (cloud *CloudController) TextToVoice() {
body := cloud.Ctx.Input.CopyBody(beego.BConfig.MaxMemory)
js, err := simplejson.NewJson(body)
if err != nil {
cloud.responseError(err)
}
//獲取文本信息
text := js.Get("text").MustString()
//判斷不能為空
if strings.TrimSpace(text) == "" {
cloud.responseError(fmt.Errorf("text param不能為空"))
}
//這里初始化大家傳入自己騰訊云的key信息
client, _ := aai.NewClientWithSecretId(
"id",
"key",
regions.Guangzhou)
request := aai.NewTextToVoiceRequest()
request.Text = common.StringPtr(text)
request.SessionId = common.StringPtr(uuid.GetRandomString(16))
request.ModelType = common.Int64Ptr(-1)
request.ModelType = common.Int64Ptr(-1)
request.Speed = common.Float64Ptr(0.8)
response, err := client.TextToVoice(request)
// 處理異常
if _, ok := err.(*errors.TencentCloudSDKError); ok {
cloud.responseError(fmt.Errorf("An API error has returned: %s", err))
}
// 非SDK異常,直接失敗。實際代碼中可以加入其他的處理。
if err != nil {
cloud.responseError(err)
}
// 打印返回的json字符串
var base64Str *string = response.Response.Audio
fileByte, err := models.Base64Decode([]byte(*base64Str))
if err != nil {
cloud.responseError(err)
}
fileName := uuid.GetRandomString(16) + "_" + fmt.Sprintf("%d", time.Now().Unix()) + ".wav"
filePath := "/data/dyfsuda/app/restful/files/" + fileName
url := "https://api.xxxx.com/files/" + fileName
//把文件寫入目錄
if err = ioutil.WriteFile(filePath, fileByte, os.ModeAppend); err != nil {
cloud.responseError(err)
}
if err = os.Chmod(filePath, 0777); err != nil {
cloud.responseError(err)
}
//返回文件路徑給客戶端
cloud.Data["json"] = map[string]string{"url": url}
cloud.ServeJSON()
}
這里每次的題目可能都不一樣,所以就不更新到數(shù)據(jù)庫了,需要的時候,調(diào)用一次接口,如果接口收費,這里就把語音文件路徑保存到數(shù)據(jù)表里,每次判斷數(shù)據(jù)表是否存在語音就可以了。
目前開發(fā)這讀題還是需要自己有服務(wù)器,如果現(xiàn)成的API調(diào)用就好了。

三、開發(fā)回顧:
1.駕校答題小程序?qū)崙?zhàn)全過程【連載】——1.數(shù)據(jù)庫設(shè)計
http://www.itdecent.cn/p/ce67bfb5254c
2.駕校答題小程序?qū)崙?zhàn)全過程【連載】——2.答題功能
http://www.itdecent.cn/p/a63a8abe5223
3.駕校答題小程序?qū)崙?zhàn)全過程【連載】——3.順序練習(xí)和模擬考試
http://www.itdecent.cn/p/f64fef8edafb
4.駕校答題小程序?qū)崙?zhàn)全過程【連載】——4.題目采集與測試
http://www.itdecent.cn/p/60edb4d5562d
5.駕校答題小程序?qū)崙?zhàn)全過程【連載】——5.數(shù)據(jù)導(dǎo)入
http://www.itdecent.cn/p/ce687502381d
6.駕校答題小程序?qū)崙?zhàn)全過程【連載】——6.語音讀題
該項目目前已經(jīng)上線,需要源碼的朋友可以找我溝通,QQ:624235922