1. 前言
語音合成技術(shù)在生活中用越來越廣泛,閱讀聽書、訂單播報、智能硬件、語音導(dǎo)航 很多場景下都加入了語音播報功能。語音合成基于深度神經(jīng)網(wǎng)絡(luò)技術(shù),提供高度擬人、流暢自然的語音合成服務(wù),可以模擬出不同人的聲音,讓應(yīng)用APP、設(shè)備開口說話,還能智能化訓(xùn)練個性語音。
這篇文章就介紹華為云提供的語音合成服務(wù)使用方法,利用提供的API接口完成語音合成功能,將合成的語音下載下來。
2. 開通功能
華為云的提供的語音合成,是一種將文本轉(zhuǎn)換成逼真語音的服務(wù)。用戶通過實(shí)時訪問和調(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
參數(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é)點(diǎn):config |
sample_rate | 否 | String | 采樣率:16000、8000默認(rèn):8000父節(jié)點(diǎn):config |
property | 否 | String | 語音合成特征字符串,組成形式為{language} {speaker} {domain},即“語種人員標(biāo)識領(lǐng)域”。發(fā)音人分為普通發(fā)音人和精品發(fā)音人,每次調(diào)用價格相同,針對精品發(fā)音人,每50字計(jì)一次調(diào)用,不足50字按一次計(jì);普通發(fā)音人每100字計(jì)一次調(diào)用,不足100字按一次計(jì)。其中1個漢字、1個英文字母或1個標(biāo)點(diǎn)均算作1個字符。精品發(fā)音人:區(qū)域僅支持cn-north-4、cn-east-3,暫時不支持音高調(diào)節(jié)。使用精品發(fā)音人如果報錯SIS.0411,請檢查是否符合使用約束。默認(rèn):chinese_xiaoyan_common父節(jié)點(diǎn):config |
speed | 否 | Integer | 語速。取值范圍:-500~500默認(rèn)值:0父節(jié)點(diǎn):config**說明:**當(dāng)取值為“0”時,表示一個成年人正常的語速,約為250字/分鐘。設(shè)置該值時,語速和數(shù)值沒有絕對的映射關(guān)系。 |
pitch | 否 | Integer | 音高。取值范圍: -500~500默認(rèn)值:0父節(jié)點(diǎn):config |
volume | 否 | Integer | 音量。取值范圍:0~100默認(rèn)值:50父節(jié)點(diǎn):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. 實(shí)現(xiàn)源碼
軟件采用QT設(shè)計(jì)的,核心部分主要是用到了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)注
29文章
2859瀏覽量
81479 -
API
+關(guān)注
關(guān)注
2文章
1493瀏覽量
61917 -
AI
+關(guān)注
關(guān)注
87文章
30625瀏覽量
268812 -
語音識別
+關(guān)注
關(guān)注
38文章
1735瀏覽量
112628 -
語音合成
+關(guān)注
關(guān)注
2文章
89瀏覽量
16152 -
深度神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
0文章
61瀏覽量
4524 -
華為云
+關(guān)注
關(guān)注
3文章
2442瀏覽量
17396
發(fā)布評論請先 登錄
相關(guān)推薦
評論