在 程 序 中 加 入 英 文 朗 讀 功 能

2021-04-13 14:18:19 字數 4642 閱讀 8927

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模組為應用程式提供了靈活的手段記...