• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁(yè) > 新聞 > 國內 >
     首頁(yè) > 新聞 > 國內 >

    MRCP協(xié)議學(xué)習筆記-語(yǔ)音合成資源中的請求處理

    2018-07-13 15:56:57   作者: james.zhu   來(lái)源:CTI論壇   評論:0  點(diǎn)擊:


      從今天的章節開(kāi)始,我們將逐一介紹MRCP協(xié)議棧中媒體處理方式的內容。語(yǔ)音合成是我們今天重點(diǎn)介紹的內容。MRCP的語(yǔ)音合成處理是對普通文本或描述文本文件,然后實(shí)時(shí)通過(guò)媒體傳輸合成的語(yǔ)音。在前面的章節中,我們曾經(jīng)介紹過(guò)其兩種基本的類(lèi)型,為了本章節的內容,這里我們再次回憶一下這些內容。MRCP中的語(yǔ)音合成包括兩種基本的媒體處理類(lèi)型:一直是basicsynth,另外一種是speechsynth。前者的媒體處理類(lèi)型僅能支持簡(jiǎn)單的語(yǔ)音合成和非常有限的單詞構成;后者則可以支持全功能的語(yǔ)音合成和豐富的單詞語(yǔ)義,同時(shí)支持文本的渲染和其語(yǔ)音轉化合成功能。此此章節和接下來(lái)的章節中,我們將重點(diǎn)介紹這兩種媒體類(lèi)型的method,事件和頭域的使用方式。
      1、在討論媒體處理類(lèi)型時(shí),我們以前也討論了SSML的描述語(yǔ)法。這些語(yǔ)法可以支持不同的媒體處理類(lèi)型和能力。首先,我們介紹一下兩個(gè)媒體資源類(lèi)型所支持的SSML語(yǔ)法格式,請求方法,事件消息,狀態(tài)機和一些特別的頭域。
      下面的列表中列出了兩種媒體資源類(lèi)型所支持的相應的SSML要素以及輸入格式。
      語(yǔ)音合成的媒體資源類(lèi)型支持七個(gè)請求消息和兩個(gè)事件消息。七個(gè)請求的method分別是:
      兩個(gè)事件消息分別是:
      語(yǔ)音合成媒體資源支持一個(gè)狀態(tài)機。狀態(tài)機是由MRCP的客戶(hù)端來(lái)發(fā)起驅動(dòng),媒體資源自己本身則產(chǎn)生事件消息。
      支持的各種特別的頭域列表:
      2、現在,我們討論一下經(jīng)常使用的具體的method方法。SPEAK method 有兩個(gè)目的: 提供語(yǔ)音合成的輸入,然后快速發(fā)起語(yǔ)音合成和媒體流數據。在SPEAK請求消息體中可包含:
    • inline 的SSML描述語(yǔ)法(application/ssml+xml);
    • 外部SSML的URL或文本列表;
    • inline的文本或多外部的消息;
      3、合成媒體資源使用的是先進(jìn)先出的隊列處理機制,因此處理過(guò)程是按照順序執行,接收順序也是如此。當媒體資源接收到SPEAK請求時(shí),如果媒體資源在空閑狀態(tài),回復的響應請求狀態(tài)則是IN-PROGRESS 的消息;如果媒體資源是在講話(huà)狀態(tài)或暫停狀態(tài)時(shí),響應的請求返回消息則是PENDING,表示此請求正在隊列中。這里讀者要注意,在合成請求中使用的一些語(yǔ)音參數是具有一定優(yōu)先級的。最高優(yōu)先級的是SSML描述語(yǔ)言,其次是SEPAK 請求中的相關(guān)語(yǔ)音參數:Voice-,Prosody-,Speaker-Profile 和 Speech-Language 頭;最低優(yōu)先級是會(huì )話(huà)默認值,它們使用SET-PARAMS和其接下來(lái)的后續method請求。以下是一個(gè)SPEAK請求示例圖:
      其相應的客戶(hù)端到服務(wù)器端響應消息如下:
      F1(client→speechsynth):
    • MRCP/2.0338 SPEAK 3214
    • Channel-Identifier:23eb10a@speechsynth
    • Content-Type: application/ssml+xml
    • Content-Length: 213
    • <?xml version="1.0" encoding="UTF-8"?>
    • <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
    • xml:lang="en-US">
    • Please leave a message after the beep.
    • <audio src="beep.wav"/>
    • </speak>
      F2 (speechsynth → client)的回復消息如下:
    • MRCP/2.0 119 3214 200 IN-PROGRESS
    • Channel-Identifier: 23eb10a@speechsynth
    • Speech-Marker: timestamp=857206027059
      F3 (speechsynth → client):
    • MRCP/2.0 156 SPEAK-COMPLETE 3214 COMPLETE
    • Channel-Identifier: 23eb10a@speechsynth
    • Speech-Marker: timestamp=861500994355
    • Completion-Cause: 000 normal
      4。如果MRCP客戶(hù)端對語(yǔ)音資源媒體講話(huà)表示一些內容命令時(shí),PAUSE請求method可以用來(lái)支持對合成媒體資源發(fā)出暫停語(yǔ)音輸出的請求。當語(yǔ)音輸出暫停以后,媒體資源會(huì )響應一個(gè)帶200 OK的狀態(tài)碼。如果在一個(gè)會(huì )話(huà)中,發(fā)出PAUSE 請求后,SPEAK不是一個(gè)活動(dòng)的狀態(tài),媒體資源服務(wù)器端必須對客戶(hù)端返回一個(gè)帶“Method not valid in this state” 的402 錯誤狀態(tài)碼。如果SPEAK請求是在活動(dòng)狀態(tài)時(shí),服務(wù)器端則必須返回一個(gè)Active-Request-Id-List,這個(gè)頭包含已被暫停的SPEAK 請求ID(注意,F4)。以下是一個(gè)暫停的示例圖:
     
      相應的PAUSE 請求消息流程圖如下:
      F1 (client → speechsynth):
    • MRCP/2.0 187 SPEAK 3215
    • Channel-Identifier: 23eb10a@speechsynth
    • Content-Type: text/uri-list
    • Content-Length: 70
    • http://www.example.com/file01.ssml
    • http://www.example.com/file02.ssml
      F2 (speechsynth → client):
    • MRCP/2.0 118 3215 200 IN-PROGRESS
    • Channel-Identifier: 23eb10a@speechsynth
    • Speech-Marker: timestamp=857206027059
      F3 (client → speechsynth):
    • MRCP/2.0 67 PAUSE 3216
    • Channel-Identifier: 23eb10a@speechsynth
      F4 (speechsynth → client):
    • MRCP/2.0 105 3216 200 COMPLETE
    • Channel-Identifier: 23eb10a@speechsynth
    • Active-Request-Id-List: 3215
      5、RESUME請求是對暫停的請求重啟。當語(yǔ)音生產(chǎn)重啟后,服務(wù)器端會(huì )對客戶(hù)端返回一個(gè)200 消息。Active-Request-Id-List 頭中會(huì )說(shuō)明重啟的請求ID(注意 F6)。當服務(wù)器端處于空閑狀態(tài)時(shí),服務(wù)器收到RESUME 請求時(shí),它必須返回一個(gè)“402 Method not valid in this state” 消息。以下是一個(gè)重啟的示例圖:
      這里,我們借用了前面的暫停消息流程,所以忽略了前面暫停的部分消息,僅展示重啟的消息流程(F5->F7)。
      F5(client→speechsynth):
    • MRCP/2.068 RESUME 3217
    • Channel-Identifier:23eb10a@speechsynth
      F6(speechsynth→client):
    • MRCP/2.01053217200 COMPLETE
    • Channel-Identifier:23eb10a@speechsynth
    • Active-Request-Id-List:3215
      F7(speechsynth→client):
    • MRCP/2.0155SPEAK-COMPLETE 3215 COMPLETE
    • Channel-Identifier:23eb10a@speechsynth
    • Speech-Marker:timestamp=861500994355
    • Completion-Cause:000 normal
      6、STOP請求是對服務(wù)器端發(fā)出停止請求,通知服務(wù)器端停止處理語(yǔ)音輸出。如果在請求的消息中沒(méi)有攜帶Active-Request-Id-List,它說(shuō)明在處理過(guò)程中的SPEAK請求已經(jīng)停止,任何在等待隊列中SPEAK請求已經(jīng)從隊列中移除。如果一個(gè)STOP請求成功停止了一個(gè)或多個(gè)PENDING 或IN-PROGRESS SPEAK 請求,則返回一個(gè)200 Success,并且在返回的200 消息中包含通過(guò)Active-Request-Id-List列出已經(jīng)成功停止的請求ID。以下是一個(gè)STOP 請求的示例圖:
      F1(client→speechsynth):
      MRCP/2.0143 SPEAK 4000
      Channel-Identifier:23eb10a@speechsynth
      Content-Type:text/plain
      Content-Length:28
      Thankyou.Pleasecallagain.
      F2(speechsynth→client):
      MRCP/2.0122 4000 200 IN-PROGRESS
      Channel-Identifier:23eb10a@speechsynth
      Speech-Marker:timestamp=857206027059
      F3(client→speechsynth):
      MRCP/2.066 STOP 4001
      Channel-Identifier:23eb10a@speechsynth
      F4(speechsynth→client):
      MRCP/2.0145 4001 200 COMPLETE
      Channel-Identifier:23eb10a@speechsynth
      Speech-Marker:timestamp=861500994355
      Active-Request-Id-List:4000
      7、如果當一個(gè)活動(dòng)的SPEAK請求中攜帶了頭Kill-On-Barge-In, 并且這個(gè)值設置為true的時(shí)候,BARGE-IN-OCCURRED請求會(huì )明確執行一個(gè)對STOP 請求的操作。BARGE-IN-OCCURRED的目的是MRCP 客戶(hù)端對媒體資源服務(wù)器端通信時(shí),對服務(wù)器端發(fā)出的一個(gè)輸入事件,例如摁了DTMF按鍵或說(shuō)話(huà)輸入觸發(fā)了收入的事件。語(yǔ)音合成資源服務(wù)器則根據輸入的數據來(lái)決定是否執行結束輸入的流程。BARGE-IN-OCCURRED 打斷可以使用在以下兩種場(chǎng)景中:
    1. 語(yǔ)音識別引擎和語(yǔ)音合成資源是各自獨立的。
    2. 語(yǔ)音識別引擎和語(yǔ)音合成資源耦合度非常高,它們之間需要緊密配合。通常可能是同一廠(chǎng)家的產(chǎn)品。
      在以上的使用場(chǎng)景中,MRCP客戶(hù)端的工作方式類(lèi)似于一個(gè)proxy 代理的方式。它從服務(wù)器端接收到一個(gè)START-OF-INPUT事件,然后馬上對服務(wù)器端發(fā)送一個(gè)BARGE-IN-OCCURRED 打斷事件。如果是兩個(gè)服務(wù)器耦合度非常高的話(huà),在接下來(lái)的由客戶(hù)端發(fā)出的BARGE-IN-OCCURRED請求中,MRCP客戶(hù)端會(huì )添加一個(gè)Proxy-Sync-Id 頭。如果服務(wù)器端已經(jīng)開(kāi)始處理打斷事件的話(huà),這個(gè)頭會(huì )支持服務(wù)器端來(lái)決定進(jìn)一步的處理流程。在MRCP這樣的設計的目的就是MRCP客戶(hù)端無(wú)需獲悉MRCP服務(wù)器端是否直接在服務(wù)器使用了打斷的流程。
      如果BARGE-IN-OCCURRED請求導致一個(gè)或多個(gè)SPEAK請求結束時(shí),服務(wù)器端會(huì )返回一個(gè) 200 Success, 并且包含一個(gè)Active-Request-Id-List頭來(lái)通知結束的請求ID。如果沒(méi)有結束SPEAK 請求的話(huà),服務(wù)器端仍然返回200 Success,當然不會(huì )包含任何Active-Request-Id-List頭值。以下示例是一個(gè)打斷過(guò)示例圖:
      這里,我們假設語(yǔ)音識別已經(jīng)通過(guò)RECOGNIZE 開(kāi)啟了識別的請求狀態(tài),這里沒(méi)有顯示。“internal barge-in message”使用在語(yǔ)音識別和合成服務(wù)器耦合工作的狀態(tài)中。現在讓我們看一下具體的消息發(fā)送流程:
      F1 (client → speechsynth):
      MRCP/2.0 376 SPEAK 9200
      Channel-Identifier: 23eb10a@speechsynth
      Content-Type: application/ssml+xml
      Content-Length: 251
      <?xml version="1.0" encoding="UTF-8"?>
      <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
      xml:lang="en-US">
      Here is your track. You may pause at anytime by simply
      saying pause.
      <audio src="track01.wav"/>
      </speak>
      F2 (speechsynth → client):
      MRCP/2.0 118 9200 200 IN-PROGRESS
      Channel-Identifier: 23eb10a@speechsynth
      Speech-Marker: timestamp=857206027059
      F3 (speechrecog → client):
      MRCP/2.0 134 START-OF-INPUT 10001 IN-PROGRESS
      Channel-Identifier:a123c31f@speechrecog
      Input-Type:speechProxy-Sync-Id:392812
      F4(client→speechsynth):
      MRCP/2.0103 BARGE-IN-OCCURRED 9201
      Channel-Identifier:23eb10a@speechsynth
      Proxy-Sync-Id:392812
      F5(speechsynth→client):
      MRCP/2.01449201 200 COMPLETE
      Channel-Identifier:23eb10a@speechsynth
      Speech-Marker:timestamp=861500994355
      Active-Request-Id-List:9200
      8、CONTROL請求是從客戶(hù)端發(fā)出的命令,通知語(yǔ)音合成資源服務(wù)器客戶(hù)端需要對客戶(hù)端說(shuō)出的說(shuō)話(huà)語(yǔ)音數據進(jìn)行修改。簡(jiǎn)單來(lái)說(shuō),就是客戶(hù)端通知語(yǔ)音合成服務(wù)器對剛才已說(shuō)語(yǔ)音修改通知,可能客戶(hù)端對前面講話(huà)需要調整相關(guān)數據,例如可能調整說(shuō)話(huà)人速度,說(shuō)話(huà)人其他參數(Voice-或者Prosody-)等。這個(gè)調整可能完全取決于語(yǔ)音合成服務(wù)器端的功能支持,調整參數的設置通過(guò)CONTROL請求中添加頭值Jump-Size 來(lái)實(shí)現。注意,它僅能支持IN-PROGRESS SPEAK 請求。
      如果CONTROL應用到了SPEAK請求中,服務(wù)器端回復一個(gè)200 Success消息,消息中包含Active-Request-Id-List 頭,而且帶一個(gè)活動(dòng)的SPEAK 請求的ID。這個(gè)ID表示應用了CONTROL的ID。如果CONTROL發(fā)出以后,沒(méi)有任何SPEAK請求是在IN-PROGRESS 狀態(tài)的話(huà),服務(wù)器端返回一個(gè)“402 Method not valid in this state”。
      這里有一個(gè)比較特別的情況需要大家注意。當MRCP 客戶(hù)端在CONTROL請求中設定了Jump-Size 頭時(shí),此跳轉超過(guò)了當前SPEAK請求起始值時(shí),這個(gè)活動(dòng)的請求會(huì )重新從起始值啟動(dòng),并且在響應中包含一個(gè)Speak-Restart 為true的頭。同樣,當MRCP 客戶(hù)端在CONTROL請求中設定了Jump-Size 頭時(shí),此跳轉超過(guò)了當前SPEAK請求結束值時(shí),這個(gè)活動(dòng)的請求會(huì )馬上結束,攜帶了一個(gè)SPEAK-COMPLETE事件。以下是一個(gè)CONTROL的示例圖:
      具體的CONTROL的消息流程如下:
      F1(client→speechsynth):
      MRCP/2.0529 SPEAK 5000
      Channel-Identifier:23eb10a@speechsynth
      Content-Type:multipart/mixed;
      boundary=0a23bf1020
      Content-Length:388--0a23bf1020
      Content-Type: text/uri-list
      Content-Length: 32
      http://www.example.com/menu.ssml
      --0a23bf1020
      Content-Type: application/ssml+xml
      Content-Length: 198
      <?xml version="1.0" encoding="UTF-8"?>
      <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
      xml:lang="en-US">
      Say operator to speak with a customer representative
      </speak>
      --0a23bf1020--
      F2 (speechsynth → client):
      MRCP/2.0 118 5000 200 IN-PROGRESS
      Channel-Identifier: 23eb10a@speechsynth
      Speech-Marker: timestamp=857206027059
      F3 (client → speechsynth):
      MRCP/2.0 114 CONTROL 5001
      Channel-Identifier: 23eb10a@speechsynth
      Jump-Size: +3 Second
      Prosody-volume:+20%
      F4(speechsynth→client):
      MRCP/2.01455001 200 COMPLETE
      Channel-Identifier:23eb10a@speechsynth
      Active-Request-Id-List:5000
      Speech-Marker:timestamp=861500994355
      F5(speechsynth→client):
      MRCP/2.0156 SPEAK-COMPLETE  5000 CO MPLETE
      Channel-Identifier:23eb10a@speechsynthSpeech-Marker:timestamp=865795961651
      Completion-Cause:000normal
      9、DEFINE-LEXICON 請求是客戶(hù)端要求語(yǔ)音合成資源服務(wù)器加載或卸載此會(huì )話(huà)中的語(yǔ)法文件。DEFINE-LEXICON請求發(fā)出后,它要求當語(yǔ)音合成資源服務(wù)器在空閑狀態(tài)時(shí),加載一些可能出現的大容量的語(yǔ)法文件。在請求中使用Load-Lexicon 頭來(lái)表示加載語(yǔ)法文件,這里默認設置問(wèn)true,表示默認加載;如果是false,則表示下載語(yǔ)法文件。語(yǔ)法文件的數據格式可以支持在消息體中的inline的消息數據,也可以使用外部的URL(text/uri-list)支持外部的數據格式。如果DEFINE-LEXICON 請求失敗的話(huà),例如,因為平臺的不同導致的語(yǔ)法格式不支持或者訪(fǎng)問(wèn)出現問(wèn)題的話(huà),則會(huì )返回一個(gè)407 錯誤狀態(tài)碼(407 Method or operation failed)。
      如果MRCP客戶(hù)端需要加載多個(gè)語(yǔ)法文件的話(huà),可以通過(guò)SPEAK請求,在請求中通過(guò)Lexicon-Search-Order頭來(lái)設定。頭值中可以包含外部URL或session:URIs(引入inline 數據)。注意,加載語(yǔ)法文件時(shí),SSML語(yǔ)法文件的優(yōu)先級會(huì )高于Lexicon-Search-Order 設定的優(yōu)先級。以下是一個(gè)DEFINE-LEXICON的示例圖:
      我們通過(guò)一個(gè)DEFINE-LEXICON的請求響應流程來(lái)整個(gè)說(shuō)明消息流程:
      F1(client→speechsynth):
      MRCP/2.0468 DEFINE-LEXICON 6999
      Channel-Identifier:23eb10a@speechsynth
      Content-ID:names@example.com
      Content-Type:application/pls+xml
      Content-Length:302<?xmlversion="1.0"encoding="UTF-8"?>
      F2 (speechsynth → client):
      MRCP/2.0 74 6999 200 COMPLETE
      Channel-Identifier: 23eb10a@speechsynth
      F3 (client → speechsynth):
      MRCP/2.0 362 SPEAK 7000
      Channel-Identifier: 23eb10a@speechsynth
      Lexicon-Search-Order: <session:names@example.com>
      Content-Type: application/ssml+xml
      Content-Length: 184
      <?xml version="1.0" encoding="UTF-8"?>
      <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
      xml:lang="en-US">
      You have a new message from Francesca.
      </speak>
      F4(speechsynth→client):
      MRCP/2.01187000 200 IN-PROGRESS
      Channel-Identifier:23eb10a@speechsynth
      Speech-Marker:timestamp=857206027059
      F5(speechsynth→client):
      MRCP/2.0156 SPEAK-COMPLETE 7000 COMPLETE
      Channel-Identifier:23eb10a@speechsynth
      Speech-Marker:timestamp=861500994355
      Completion-Cause:000 normal
      在今天的章節中,我們主要介紹了媒體資源請求的處理流程。MRCP 請求處理包含了七個(gè)主要的請求方式,我們針對這七個(gè)請求方式通過(guò)每個(gè)請求的基本介紹,錯誤碼,并且結合示例圖和請求的流程消息來(lái)加以完整的說(shuō)明。
      在接下來(lái)的部分章節中,我們繼續介紹媒體資源的事件和一些頭域值參數設置。
         



      unimrcp-MRCP協(xié)議學(xué)習分享,QQ群號:208136295
      關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的行業(yè)分享
      freepbx 技術(shù)論壇:www.ippbx.org.cn
      Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
      歐米(Omni)智能客服解決方案
      融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
      unimrcp-MRCP協(xié)議學(xué)習分享,QQ群號:208136295
      關(guān)注微信公眾號:asterisk-cn,獲得有價(jià)值的行業(yè)分享
      freepbx 技術(shù)論壇:www.ippbx.org.cn
      Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
      歐米(Omni)智能客服解決方案
      融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
    【免責聲明】本文僅代表作者本人觀(guān)點(diǎn),與CTI論壇無(wú)關(guān)。CTI論壇對文中陳述、觀(guān)點(diǎn)判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔全部責任。

    專(zhuān)題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 鹤庆县| 岑溪市| 治县。| 渝北区| 潞西市| 商河县| 七台河市| 扎鲁特旗| 岳阳市| 贵南县| 汝州市| 长宁县| 光山县| 怀仁县| 榆林市| 蒙城县| 周至县| 鄯善县| 马鞍山市| 界首市| 南华县| 水富县| 阜南县| 卓资县| 漳州市| 北辰区| 延安市| 临漳县| 潜山县| 波密县| 丰台区| 萍乡市| 德昌县| 临猗县| 长白| 普兰店市| 梅河口市| 永胜县| 山东| 广河县| 镇赉县| http://444 http://444 http://444 http://444 http://444 http://444