CentOS 5下freeswitch中整合使用ekho實現TTS功能三

來源:互聯網
上載者:User

標籤:

四:在freeswitch中調用ekho

註:在測試過程中該語音包好像沒用

FreeSWITCH 中文語音包測試版fssounds.zip

在/usr/local/freeswitch/sounds/下建立目錄zh/cn/sue(因為不知道聲音主人的名字,就先用sue代替了,抱歉抱歉)

mkdir -p /usr/local/freeswitch/sounds/zh/cn/sue

將音效檔移動到目標目錄

mv output/* /usr/local/freeswitch/sounds/zh/cn/sue/

- 增加中文定義

cd /usr/local/freeswitch/conf/lang

cp -a en zh

cd zh

mv en.xml zh.xml

編輯zh.xml,將第2行換成

<language name="zh" say-module="zh" sound-prefix="$${sounds_dir}/zh/cn/sue" tts-engine="mod_tts_commandline" tts-voice="sue">

- 增加對中文的載入

編輯/usr/local/freeswitch/conf/freeswitch.xml,找到<section name="languages" description="Language Management">段,加入

<X-PRE-PROCESS cmd="include" data="lang/zh/*.xml"/>

- 增加中文say模組的載入

編輯/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml

去除<load module="mod_say_zh"/>的注釋

- 設定中文為預設語言

編輯/usr/local/freeswitch/conf/vars.xml,加入以下幾行

<X-PRE-PROCESS cmd="set" data="default_language=zh"/>

<X-PRE-PROCESS cmd="set" data="default_dialect=cn"/>

<X-PRE-PROCESS cmd="set" data="default_voice=sue"/>

- 增加對ekho的中文支援

編輯/usr/local/freeswitch/conf/autoload_configs/tts_commandline.conf.xml

將<param name="command" value="echo ${text} | text2wave -f ${rate} > ${file}"/>

改為:

<param name="command" value="echo ${text} > tmp.txt; iconv -t UTF8 tmp.txt >${file}.txt; ekho -v ${voice} -f ${file}.txt -o ${file}"/>

或者是。其中iconv -t UTF8 tmp.txt >${file}.txt;這句是因為有些系統要轉換字元編碼

<param name="command" value="echo ${text} > ${file}.txt; ekho -f ${file}.txt -o ${file}"/>

- 重新載入xml,在fs_cli,執行:

reloadxml

- 外呼電話路由到lua指令碼實現TTS

originate user/1002 &lua(recharge.lua)

  1 --session:set_tts_parms("tts_commandline", "Ting-Ting")  2 --session:setVariable("tts_engine", "tts_commandline")  3 --session:setVariable("tts_voice", "Ting-Ting")  4 --session:answer()  5 --session:sleep(1000)  6 --print("hello")  7 --session:speak("hello")  8 --session:speak("您好,歡迎使用空中儲值服務")  9 --session:speak("hello,我是好人") 10 --session:sleep(5000) 11   12  13 error_prompt = "say:輸入錯誤,請重新輸入" 14 account = "" 15 digits = "" 16 balance = 100    --餘額 17 charge = 100     --儲值卡上金額 18  19 function error() 20     session:speak("輸入錯誤,請重新輸入") 21 end 22  23 function do_charge(account, charge) 24     balance = balance + charge 25     return balance 26 end 27   28 function main_menu() 29     if not session:ready() then return end 30  31         --session:speak(‘查詢請按1,儲值請按2,否則請掛機‘)  32         digits = session:playAndGetDigits(1, 1, 3, 10000, "#", "say:查詢請按1,儲值請按2,否則請掛機", error_prompt, "^1|2$") 33         --digits = session:playAndGetDigits(2, 2, 3, 10000, "#", "", "", "") 34         --session:speak(‘輸入錯誤,請重新輸入‘) 35         --digits = session:playAndGetDigits(1, 1, 3, 5000, "#", "", "", "^1|2$") 36         session:execute("log", "INFO main_menu:" .. digits) 37         if not (digits == "") then 38             ask_account(digits) 39         else 40             --session:speak(‘輸入錯誤,請重新輸入‘) 41             --main_menu() 42             goodbye() 43         end 44 end 45   46 function ask_account(service_type) 47     if not session:ready() then return end 48  49         digits = session:playAndGetDigits(4, 5, 3, 5000, "#", "say:請輸入你的帳號,以井號結束", error_prompt, "^\\d{4}$") 50         session:execute("log", "INFO account:" .. digits) 51         if not (digits == "") then 52             account = digits 53                 if (service_type == "1") then 54                     ask_account_password() 55                 else 56                     ask_card() 57                 end 58         else 59            goodbye() 60        end 61 end 62   63 function ask_account_password() 64     if not session:ready() then return end 65  66          digits = session:playAndGetDigits(4, 5, 3, 5000, "#", "say:請輸入你的密碼,以井號結束", error_prompt, "^\\d{4}$") 67          session:execute("log", "INFO account p:" .. digits) 68          if not (digits == "") then 69              password = digits 70             chack_account_password() 71     else 72             goodbye() 73         end 74 end 75  76  77  78 function ask_card() 79     if not session:ready() then return end 80  81         digits = session:playAndGetDigits(4, 5, 3, 5000, "#", "say:請輸入你的儲值卡卡號,以井號結束", error_prompt, "^\\d{4}$") 82         session:execute("log", "INFO card:" .. digits) 83  84         if not (digits == "") then 85             card = digits 86                 chack_account_card() 87         else 88             goodbye() 89         end 90 end 91  92  93 function chack_account_password() 94     if not session:ready() then return end 95  96         if (account == "1111" and password == "1111") then 97             session:speak("您的餘額是" .. balance .. "元") 98                 session:sleep(5000) 99                 main_menu()100         else101             session:speak("輸入錯誤,請重新輸入")102                 main_menu()103         end104 end105 106 function chack_account_card()107     if not session:ready() then return end108 109         if (account == "1111" and card == "2222") then110             session:speak("您要儲值" .. charge .. "元")111          112                 digits = session:playAndGetDigits(1, 1, 3, 10000, "#", "say:確認請按1,返回請按2", error_prompt, "^[12]$")113 114                 if digits == "1" then115                     balance = do_charge(account, charge)116                         session:speak("儲值成功,儲值金額為" .. charge .. "元,餘額為" .. balance .. "元")117                         main_menu()118                 else119                     if digits == "2" then120                             session:sleep(5000)121                                 main_menu()122                         else123                             goodbye()124                         end125                 end126         else127             session:speak("輸入有誤,請重新輸入")128                 ask_account("2")129         end130 end131 132 function goodbye()133     if not session:ready() then return end134 135         session:speak("再見")136         session:hangup()137 end138 139 140 session:set_tts_parms("tts_commandline", "Mandarin")141 session:setVariable("tts_engine", "tts_commandline")142 session:setVariable("tts_voice", "Mandarin")143 144 session:answer()145 --session:speak("hello,welcome to freeSWITCH")146 session:speak("您好,歡迎使用空中儲值服務") --,"zh", "messages", "pronounced") 147 session:set_tts_parms("flite", "kal")148 session:speak("Please say the name of the person you‘re trying to contact")149 session:set_tts_parms("tts_commandline", "Mandarin")150 --session:speak("您好,歡迎使用空中儲值服務")151 --session:say("12345", "zh", "number", "pronounced")152 --session:sleep(10000)153 main_menu()154 --session:streamFile("/usr/local/freeswitch/hello.wav")155 --session:streamFile("/usr/local/freeswitch/sounds/zh/cn/sue/ivr/8000/ivr-accept_reject_voicemail.wav")156 --Sound.load("/usr/local/freeswitch/sounds/music/8000/danza-espanola-op-37-h-142-xii-arabesca.wav"):play()157 session:hangup()158 --session:print("hello!")

 

特別注意:

首先要在freeswitch中編譯安裝mod_say_zh和mod_tts_commandline 模組;如freeswitch已經安裝但是未安裝該2個模組,則按以下步驟安裝:

1. 在freeswitch原始碼目錄中使用

  make mod_say_zh-install 

  make mod_tts_commandline

2.然後到freeswitch中載入該模組

  load mod_say_zh

  load mod_tts_commandle

CentOS 5下freeswitch中整合使用ekho實現TTS功能三

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.