[ JS ] TTS Speech Synthesis Markup Language
這篇算是 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
有興趣的話才玩玩看吧
--
舊文,挖坑前置作業
Gesmic7:http://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
Ajax 近期熱門文章
PTT數位生活區 即時熱門文章
7
20