1. 前言
語音合成技術(shù)在生活中用越來越廣泛,閱讀聽書、訂單播報、智能硬件、語音導(dǎo)航 很多場景下都加入了語音播報功能。語音合成基于深度神經(jīng)網(wǎng)絡(luò)技術(shù),提供高度擬人、流暢自然的語音合成服務(wù),可以模擬出不同人的聲音,讓應(yīng)用APP、設(shè)備開口說話,還能智能化訓(xùn)練個性語音。
這篇文章就介紹華為云提供的語音合成服務(wù)使用方法,利用提供的API接口完成語音合成功能,將合成的語音下載下來。


2. 開通功能
華為云的提供的語音合成,是一種將文本轉(zhuǎn)換成逼真語音的服務(wù)。用戶通過實時訪問和調(diào)用API獲取語音合成結(jié)果,將用戶輸入的文字合成為音頻。通過音色選擇、自定義音量、語速,為企業(yè)和個人提供個性化的發(fā)音服務(wù)。
2.1 語音交互服務(wù)
地址: https://console.huaweicloud.com/sis/?region=cn-north-4#/sis/stts

2.2 幫助文檔
地址: https://support.huaweicloud.com/api-sis/sis_03_0111.html

(1)請求Header參數(shù):
| 參數(shù) | 是否必選 | 參數(shù)類型 | 描述 | 
|---|---|---|---|
| X-Auth-Token | 是 | String | 用戶Token。Token認(rèn)證就是在調(diào)用API的時候?qū)oken加到請求消息頭,從而通過身份認(rèn)證,獲得操作API的權(quán)限,響應(yīng)消息頭中X-Subject-Token的值即為Token。 | 
請求頭里的X-Auth-Token字段在之前的文章已經(jīng)介紹過,獲取方法看這里: https://bbs.huaweicloud.com/blogs/317759 翻到2.3小節(jié)。
**
(2)請求Body參數(shù):**
| 參數(shù) | 是否必選 | 參數(shù)類型 | 描述 | 
|---|---|---|---|
| text | 是 | String | 待合成的文本,文本長度限制小于500字符。 | 
| config | 否 | 配置JSON | 語音合成配置信息。 | 
(3)TtsConfig的配置參數(shù):
| 參數(shù) | 是否必選 | 參數(shù)類型 | 描述 | 
|---|---|---|---|
| audio_format | 否 | String | 語音格式頭:wav、mp3、pcm默認(rèn):wav父節(jié)點:config | 
| sample_rate | 否 | String | 采樣率:16000、8000默認(rèn):8000父節(jié)點:config | 
| property | 否 | String | 語音合成特征字符串,組成形式為{language} {speaker} {domain},即“語種人員標(biāo)識領(lǐng)域”。發(fā)音人分為普通發(fā)音人和精品發(fā)音人,每次調(diào)用價格相同,針對精品發(fā)音人,每50字計一次調(diào)用,不足50字按一次計;普通發(fā)音人每100字計一次調(diào)用,不足100字按一次計。其中1個漢字、1個英文字母或1個標(biāo)點均算作1個字符。精品發(fā)音人:區(qū)域僅支持cn-north-4、cn-east-3,暫時不支持音高調(diào)節(jié)。使用精品發(fā)音人如果報錯SIS.0411,請檢查是否符合使用約束。默認(rèn):chinese_xiaoyan_common父節(jié)點:config | 
| speed | 否 | Integer | 語速。取值范圍:-500~500默認(rèn)值:0父節(jié)點:config**說明:**當(dāng)取值為“0”時,表示一個成年人正常的語速,約為250字/分鐘。設(shè)置該值時,語速和數(shù)值沒有絕對的映射關(guān)系。 | 
| pitch | 否 | Integer | 音高。取值范圍: -500~500默認(rèn)值:0父節(jié)點:config | 
| volume | 否 | Integer | 音量。取值范圍:0~100默認(rèn)值:50父節(jié)點:config | 
(4)普通發(fā)音人property取值范圍:
| property取值 | 描述 | 
|---|---|
| chinese_xiaoqi_common | 小琪,標(biāo)準(zhǔn)女聲發(fā)音人。 | 
| chinese_xiaoyu_common | 小宇,標(biāo)準(zhǔn)男聲發(fā)音人。 | 
| chinese_xiaoyan_common | 小燕,溫柔女聲發(fā)音人。 | 
| chinese_xiaowang_common | 小王,童聲發(fā)音人。 | 
| chinese_xiaowen_common | 小雯,柔美女聲發(fā)音人。 | 
| chinese_xiaojing_common | 小婧,俏皮女聲發(fā)音人。 | 
| chinese_xiaosong_common | 小宋,激昂男聲發(fā)音人。 | 
| chinese_xiaoxia_common | 小夏,熱情女聲發(fā)音人。 | 
| chinese_xiaodai_common | 小呆,呆萌童聲發(fā)音人。 | 
| chinese_xiaoqian_common | 小倩,成熟女聲發(fā)音人。 | 
| english_cameal_common | cameal,柔美女聲英文發(fā)音人。 | 
(5)精品發(fā)音人property取值范圍:
| property取值 | 描述 | 
|---|---|
| chinese_huaxiaoxia_common | 華小夏,熱情女聲發(fā)音人。 | 
| chinese_huaxiaogang_common | 華曉剛,利落男聲發(fā)音人。 | 
| chinese_huaxiaolu_common | 華小璐,知性女聲發(fā)音人。 | 
| chinese_huaxiaoshu_common | 華小舒,舒緩女聲發(fā)音人。 | 
| chinese_huaxiaowei_common | 華小唯,嗲柔女聲發(fā)音人。 | 
| chinese_huaxiaoliang_common | 華小靚,嘹亮女聲發(fā)音人。 | 
| chinese_huaxiaodong_common | 華曉東,成熟男聲發(fā)音人。 | 
| chinese_huaxiaoyan_common | 華小顏,嚴(yán)厲女聲發(fā)音人。 | 
| chinese_huaxiaoxuan_common | 華小萱,臺灣女聲發(fā)音人。 | 
| chinese_huaxiaowen_common | 華小雯,柔美女聲發(fā)音人。 | 
| chinese_huaxiaoyang_common | 華曉陽,朝氣男聲發(fā)音人。 | 
| chinese_huaxiaomin_common | 華小閩,閩南女聲發(fā)音人。 | 
| chinese_huanvxia_literature | 華女俠,武俠女生發(fā)音人,只支持16k的采樣率。 | 
| chinese_huaxiaoxuan_literature | 華曉懸,懸疑男聲發(fā)音人,只支持16k的采樣率。 | 
| chinese_huaxiaomei_common | 華小美,溫柔女聲發(fā)音人。 | 
(6)響應(yīng)的Body參數(shù)
狀態(tài)碼: 200
| 參數(shù) | 是否必選 | 參數(shù)類型 | 描述 | 
|---|---|---|---|
| trace_id | 否 | String | 服務(wù)內(nèi)部的令牌,可用于在日志中追溯具體流程。在某些錯誤情況下可能沒有此令牌字符串。 | 
| result | 否 | object | 調(diào)用成功表示識別結(jié)果,調(diào)用失敗時無此字段。 | 
(7)CustomResult參數(shù)
| 參數(shù) | 是否必選 | 參數(shù)類型 | 描述 | 
|---|---|---|---|
| data | 否 | String | 語音數(shù)據(jù),以Base64編碼格式返回。用戶如需生成音頻,需要將Base64編碼解碼成byte數(shù)組,再保存為音頻,音頻格式同**“audio_format”**參數(shù)設(shè)置的值,默認(rèn)為wav格式。 | 
2.3 在線調(diào)試接口
通過在線調(diào)試接口,可以快速調(diào)試接口參數(shù),請求方式,返回結(jié)果等信息。
地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=SIS&api=RunTts

還可以在線填入測試參數(shù),進(jìn)行測試效果。

2.4 請求接口總結(jié)
請求地址格式: POST /v1/{project_id}/tts
 ?
 ?
 完整請求地址:
 https://sis-ext.cn-north-4.myhuaweicloud.com/v1/0e5957be8a00f53c2fa7c0045e4d8fbf/tts
 ?
 請求體:
 {
  "text": "請注意坐姿",
  "config": {
   "audio_format": "wav",
   "sample_rate": "16000",
   "property": "chinese_xiaoqi_common",
   "speed": 0,
   "pitch": 0,
   "volume": 0
  }
 }
 ?
 ?
 請求頭:
 {
  "X-Auth-Token": "******",
  "Content-Type": "application/json;charset=UTF-8"
 }
 ?
 響應(yīng)體:
 {"result":{"data":xxxxxxxx"}}
 ?
 這個xxxx就是返回的Base64編碼語音數(shù)據(jù),可以解碼后保存成文件即可。
3. 實現(xiàn)源碼
軟件采用QT設(shè)計的,核心部分主要是用到了HTTP請求相關(guān)的操作。


3.1 文字轉(zhuǎn)語音源碼
//文本轉(zhuǎn)語音
 void Widget::TextToAudio(QString text)
 {
     function_select=1;
     QString requestUrl;
     QNetworkRequest request;
 ?
     //設(shè)置請求地址
     QUrl url;
 ?
     //請求地址
     requestUrl = QString("https://sis-ext.%1.myhuaweicloud.com/v1/%2/tts")
             .arg(SERVER_ID)
             .arg(PROJECT_ID);
 ?
     //設(shè)置數(shù)據(jù)提交格式
     request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
 ?
     //設(shè)置token
     request.setRawHeader("X-Auth-Token",Token);
 ?
     //構(gòu)造請求
     url.setUrl(requestUrl);
     request.setUrl(url);
 ?
     QString post_param=QString
                ("{"
                 ""text": "%1","
                 ""config": {"
                  ""audio_format": "%2","
                  ""sample_rate": "%3","
                  ""property": "%4","
                  ""speed": %5,"
                  ""pitch": 0,"
                  ""volume": %6"
                 "}"
                "}").arg(text).arg(ui- >comboBox_formt- >currentText())
             .arg(ui- >comboBox_cai_yang_lv- >currentText())
             .arg(ui- >comboBox_fa_yin_ren- >currentText())
             .arg(ui- >spinBox_audio_speed- >value())
             .arg(ui- >spinBox_yin_liang- >value());
 ?
     //發(fā)送請求
     manager- >post(request, post_param.toUtf8());
 }
 ?
 ?
 //生成語音
 void Widget::on_pushButton_to_audio_clicked()
 {
     QString text=ui- >lineEdit- >text();
     if(text.isEmpty())
     {
         QMessageBox::information(this,"提示","請輸入文本",
         QMessageBox::Ok,QMessageBox::Ok);
         return;
     }
     qDebug()< < "text:"<
3.2 獲取token
/*
 功能: 獲取token
 */
 void Widget::GetToken()
 {
     //表示獲取token
     function_select=3;
 ?
     QString requestUrl;
     QNetworkRequest request;
 ?
     //設(shè)置請求地址
     QUrl url;
 ?
     //獲取token請求地址
     requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens")
                  .arg(SERVER_ID);
 ?
     //自己創(chuàng)建的TCP服務(wù)器,測試用
     //requestUrl="http://10.0.0.6:8080";
 ?
     //設(shè)置數(shù)據(jù)提交格式
     request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));
 ?
     //構(gòu)造請求
     url.setUrl(requestUrl);
 ?
     request.setUrl(url);
 ?
     QString text =QString("{"auth":{"identity":{"methods":["password"],"password":"
     "{"user":{"domain": {"
     ""name":"%1"},"name": "%2","password": "%3"}}},"
     ""scope":{"project":{"name":"%4"}}}}")
             .arg(MAIN_USER)
             .arg(IAM_USER)
             .arg(IAM_PASSWORD)
             .arg(SERVER_ID);
 ?
     //發(fā)送請求
     manager- >post(request, text.toUtf8());
 }
 ?
3.3 解析返回值
//解析反饋結(jié)果
 void Widget::replyFinished(QNetworkReply *reply)
 {
     QString displayInfo="";
 ?
     int statusCode = reply- >attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
 ?
     //讀取所有數(shù)據(jù)
     QByteArray replyData = reply- >readAll();
 ?
     qDebug()< < "狀態(tài)碼:"<
- 
                                音頻
                                +關(guān)注
關(guān)注
31文章
3113瀏覽量
84706 - 
                                API
                                +關(guān)注
關(guān)注
2文章
2010瀏覽量
65930 - 
                                AI
                                +關(guān)注
關(guān)注
89文章
37444瀏覽量
292898 - 
                                語音識別
                                +關(guān)注
關(guān)注
39文章
1800瀏覽量
115340 - 
                                語音合成
                                +關(guān)注
關(guān)注
2文章
94瀏覽量
16703 - 
                                深度神經(jīng)網(wǎng)絡(luò)
                                +關(guān)注
關(guān)注
0文章
62瀏覽量
4819 - 
                                華為云
                                +關(guān)注
關(guān)注
3文章
2800瀏覽量
19021 
發(fā)布評論請先 登錄
訊飛AI體驗棧重磅上線,聽寫合成文字識別輕松搞定!
語音合成芯片與語音芯片對比
語音合成芯片與語音芯片對比
29頁PPT,詳細(xì)介紹Ouroboros的語音AI芯片
語音合成IC與語音IC的兩三事
語音合成IC選型之經(jīng)驗分享
PWM在合成語音輸出電路中的應(yīng)用
基于短信和語音合成的報警接口設(shè)計
基于TMS320C6678的合成語音檢測算法
    
          
        
        
AI語音處理-文字合成語音功能
                
 
           
            
            
                
            
評論