[ JS ] TTS Speech Synthesis Markup Language

看板Ajax作者 (~RadicalDreamer~)時間12年前 (2013/11/17 14:41), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這篇算是 Justin/twitch 平台應用的記錄 內容可能很雜亂 ︿︿") 一般人對於 Text to Speech 文字轉換語音的印象 最接近的一次應該就屬 Google 翻譯 http://ppt.cc/qOq4 不過有感於瀏覽器日漸肥大 實際應用時還可能會干擾到原本的使用習慣 因此開始考慮 擺脫瀏覽器的使用方式 以下為使用 LimeChat2 + JavaScript 的心得 真要說起來 CreateObject("SAPI.SpVoice").Speak"I love you" 是一切的濫觴 對這串沒啥印象? 那麼這個標題 「你知道嗎? 電腦其實也有性別」「檢查你的電腦是男生還是女生」 不曉得有沒有看過類似的網路流言 XD 原文是採用 VBScript 呼叫 Speech Application Programming Interface(SAPI) 延伸閱讀:http://www.ptt.cc/bbs/digitalk/M.1381463983.A.7D4.html 可惜 SAPI 方面沒有找到合用的臺灣腔語音引擎 因此改往 Microsoft Speech Platform(MSSP)作研究 剛開始其實很不在意語音參數 想說 MSSP 能用就好 只是看到 spcbght.bat:http://denspe.blog84.fc2.com/blog-entry-29.html 不信邪為什麼人家可以辦得到 參考之下才發現大有玄機 //SAPI5のVoiceオブジェクトには //「速度」「音量」のプロパティはあるが「音程」はない。 //音程を指定する場合は<pitch absmiddle="音量値"> //を使いXMLモードで再生する必要がある。 //その場合は第二引数に「SPF_IS_XML(0x08)」を指定してXMLを強制する。 這註解乍看之下是 SAPI 沒想到意外的也能作用於 MSSP VoiceObj.Speak('<pitch absmiddle="'+VoicePitch+'">'+SpeakText+"</pitch>" ,0x00|0x08); 搭配最後一行的註解 讓我更是在意 Speak method 葫蘆裡到底賣的是什麼藥?! 回頭去找 http://msdn.microsoft.com/library/ee125647.aspx 終於讓我發現了 SpeechVoiceSpeakFlags(SVSF) http://msdn.microsoft.com/library/ee125223.aspx 也才注意到原來預設的同步 是指朗讀的時候會將執行中的程式鎖住(防止下一步操作 改為 Asynchronous Speaking 非同步語音 整個就非常合乎使用了 而 SAPI text-to-speech (TTS) extensible markup language (XML) 標籤 也改為 MSSP 的 Speech Synthesis Markup Language (SSML) http://msdn.microsoft.com/library/hh378377.aspx 這真的是要暴力解才會這樣子用 因為 MSSP 與 SSML 完全沒提到這件事情 最後就產生了這個大雜燴的 JavaScript 將 SAPI.SpVoice 改為 Speech.SpVoice 呼叫 MSSP 但實際上 Object 仍保有 SAPI 性質 所以 Speak method 讓 MSSP 支援 SVSF 達成 非同步 與支援 SSML 可自訂語音參數 https://drive.google.com/file/d/0B3hkFOHrzSukU3hvVE12OElld3M 過程中 TRY & ERROR 真的是充滿各種撞牆期 尤其是有些參數都不會回報錯誤訊息 1)想說有看到 http://www.w3.org/TR/speech-synthesis11/ 結果用 <speak version="1.1"> 就是毫無反應 2)又譬如 SSML prosody Element 搭配 parseInt 時好時壞 後來抓 log 出來看才發現 正數 都…(默 少了個 + 就是死給你看 ╮(﹀_﹀")╭ 不過後續修補也加入了 isNaN 算是難得的防呆 3)常用到 String.match 或 String.replace 這功能 這次好好的重新回顧了 RegExp http://rubular.com 4)平常用 != '' 習慣了 有時候太順手會打出 == '' 這種鬼東西(被巴頭 訂正十次 == null 請養成好習慣 目前還有打算改善的地方有兩個 1)一個是讀取文件的方式 由於 . 跟 : 都會影響 array LimeChat2 能夠使用的函式又有限 目前還沒想到怎麼迴避 o(><;)o 2)另外就是注音符號了 語音的字典檔沒辦法念 是有考慮過這種方法 http://winscript.jp/azurea/4 不過實作上 應該用關鍵字替代更實際 XD 最後附上釋出前發現的網站 http://tdc.putonghuaonline.com/tool/index.php 之前瀏覽了一下 似乎也不少這種 TTS App 有興趣的話才玩玩看吧 -- 舊文,挖坑前置作業 Gesmic7http://www.ptt.cc/bbs/Live/M.1381476020.A.B9E.html 附上各種參考資料 http://www.neko.ne.jp/~freewing/software/speech_app_11/ http://mahoro-ba.net/e1591.html http://www36.atwiki.jp/jikkyosha_ust/pages/80.html#id_32933629 接下來才看有沒有動力轉移到 Perl 或 python 這樣子就連 hexchat 都有機會用用看了 _(:3J∠)_ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 49.158.75.98
文章代碼(AID): #1IY6K7xR (Ajax)
文章代碼(AID): #1IY6K7xR (Ajax)