2023年02月21日 17:05:00
---- 金 山 詞 霸2000 的 英 文 全 文 朗 讀 功 能 相 信 一 定 給 嘗 試 過 的 用 戶 留 下 了 很 深 刻 的 印 象, 而 作 為 一 個 程 序 設 計 者, 你 一 定 也 想 在 自 己 的 程 序 中 加 入 類 似 的 功 能 吧, 因 為 那 將 讓 自 己 的 程 序 增 色 不 少。
----其 實 這 並 不 是 一 件 困 難 的 事, 因 為 金 山 詞 霸 實 際 上 也 只 是 直 接 使 用 了ms 的tts(text -to -speech) 技 術 而 已, 通 過 對ms speech api 的 編 程, 我 們 完 全 可 以 實 現 比 其 更 強 大 的 功 能。 下 面, 讓 我 們 在delphi 環 境 下 實 際 嘗 試 一 下。
----首 先 從 金 山 詞 霸 的 光 盤 上/ciba 目 錄 下 運 行 並 安 裝mstts.exe(ms tts engine) 和spchapi.exe(ms speech api)。
----至 此, 我 們 就 可 以 開 始 實 際 編 程 了。
----首 先 在form 的oncreate 中 對 需 要 使 用 接 口 初 始 化 並 進 行 注 冊:
----由 於delphi 對 接 口 進 行 了 良 好 的 包 裝, 因 此 只 需 直 接 建 立 包 裝 類, 其 他 後 臺 的 操 作 如 接 口 的 查 詢、 釋 放 等 交 給delphi 在 後 臺 自 動 完 成。
----注 意 這 裡 的register 操 作 是 必 不 可 少 的, 因 為 可 能 有 多 個 程 序 不 同 設 置 使 用tts 引 擎。
----然 後 在mainform 上 放 一 個tmemo 和 若 幹 個 tbutton, 並 在 其onclick 中 加 入 對 應 的 代 碼。
form 定 義 如 下:
object frmmain: tfrmmain left = 296 top = 187 borderstyle = bsdialog caption = 『 英 文 全 文 朗 讀 演 示' clientheight = 185 clientwidth = 456 color = clbtnface font.charset = gb2312_charset font.color = clwindowtext font.height = -12 font.name = 『 宋 體' font.style = oldcreateorder = false position = podesktopcenter oncreate = formcreate pixelsperinch = 96 textheight = 12 object memtext: tmemo left = 8 top = 8 width = 361 height = 169 scrollbars = ssvertical taborder = 0 end object btnread: tbutton left = 376 top = 8 width = 75 height = 25 caption = 『 朗 讀( &r)' taborder = 1 onclick = btnreadclick end object btnpause: tbutton left = 376 top = 40 width = 75 height = 25 caption = 『 暫 停( &p)' enabled = false taborder = 2 onclick = btnpauseclick end object btnstop: tbutton left = 376 top = 72 width = 75 height = 25 caption = 『 停 止( &s)' enabled = false taborder = 3 onclick = btnstopclick end object btnforward: tbutton left = 376 top = 120 width = 75 height = 25 caption = 『 下 一 句( &n)' enabled = false taborder = 4 onclick = btnforwardclick end object btnrewind: tbutton left = 376 top = 152 width = 75 height = 25 caption = 『 上 一 句( &w)' enabled = false taborder = 5 onclick = btnrewindclick end end----關 鍵 代 碼 段 如 下:
---- 1. 朗 讀 與 停 止
...procedure tfrmmain.btnreadclick(sender: tobject); begin fispeech.speak(memtext.lines.text, vtxtst_ reading); btnpause.enabled := true; btnstop.enabled := true; end; procedure tfrmmain.btnstopclick(sender: tobject); begin fispeech.stopspeaking; btnpause.enabled := false; btnstop.enabled := false; btnpause.caption := 『 暫 停( &p)'; end; ...----speak 成 員 函 數 的 第 一 個 參 數 向tts 引 擎 傳 遞 需 要 朗 讀 的 文 字, 第 二 個 參 數 由 指 定 朗 讀 時 使 用 的 語 氣 和 優 先 級 的 兩 個 符 號 合 並 而 成。
---- 2. 暫 停 與 恢 復
...procedure tfrmmain.btnpauseclick(sender: tobject); begin with fispeech do if isspeaking then begin audiopause; btnpause.caption := 『 恢 復( &r)'; end else begin audioresume; btnpause.caption := 『 暫 停( &p)'; end;end;...----這 裡 通 過isspeaking 屬 性 可 以 取 得 當 前 狀 態, 然 後 通 過audiopause 和audioresume 暫 停 和 恢 復 朗 讀。
----另 外 用 成 員 函 數audiofastforward 和audiorewind 可 以 向 前 和 後 跳 過 一 句 朗 讀, 通 過 讀 寫speed 屬 性 還 可 以 取 得 或 設 置 朗 讀 的 語 速, 單 位 是 字/ 分, 缺 省 值 為170。
----注 意speed 和enabled 屬 性 缺 省 設 置 是 只 寫 的, 但 實 際 上ivtxtauto 提 供 了get_speed 和get_enabled 函 數, 所 以 我 們 只 要 把vtxtauto_tlb 單 元 中 的 聲 明 修 改 一 下, 如:
...ivtxtauto = inte***ce(idispatch) ... property speed: integer read get_speed write set_speed; property enabled: integer read get_enabled write set_enabled; ...end; ...----即 可 正 常 使 用speed 和enabled 屬 性 了。
----至 此, 一 個 簡 單 的 英 文 全 文 朗 讀 器 就 完 成 了, 有 興 趣 的 朋 友 可 以 為 其 加 入 監 視 剪 貼 板, 熱 鍵 激 活 等 功 能。
----本 文 程 序 在win nt/98 + delphi 4/5 環 境 下 調 試 通 過。
思考 怎麼在C 中加入新功能
本文說的不是自定義類,函式之類的,指的是修改,增加c 的語法。重新開發一門新的語言,工作量太大,很難做到科學實用,而是也難以跟上c 的更新進度,所以選擇擴充c 的方法,以滿足專業領域的應用。情景一 定義乙個交換運算子 實現函式 swap a,b 的功能。上 int a 3 int b 5 a b 之...
微軟在Windows中加入多點觸控功能
在本週舉行的pdc大會上,微軟對外宣布了其su ce sdk。這一舉措被視為微軟將多點觸控技術帶入windows作業系統的前奏。據cnet的ina friedman報道說,微軟會在windows 7中加入多點觸控技術,以作為其作業系統產品重返消費者市場的嘗試 1.2.在windows 7之前我們將會...
Django中加入日誌功能
1 django中加入日誌功能 django 中使用python的 logging 模組記錄log,在 django 中使用 django 提供的配製方法。就是在 settings 中通過變數 logging,logging 是乙個字典,典型的配置如下 logging模組為應用程式提供了靈活的手段記...