Skip to content

Commit

Permalink
WorldVoice v1.5
Browse files Browse the repository at this point in the history
  • Loading branch information
tsengwoody committed Dec 29, 2020
1 parent 5c9c329 commit 6d0c2ba
Show file tree
Hide file tree
Showing 14 changed files with 696 additions and 595 deletions.
30 changes: 19 additions & 11 deletions addon/doc/zh_CN/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,15 @@ WorldVoice 是依据 VE driver 为基础开发而成的 addon。运行于 NVDA 2

* NVDA+ctrl+S 选择 WorldVoice 语音合成器。
* NVDA+ctrl+V 有基本语音速度、音调、音量等基本设定,其中数字模式、中文空白间隔为 WorldVoice 多的客制设定。
* 数字模式:有默认(VE 默认的读法)、自动数字(以默认语音并尽可能以数字报读)、中文数字(强制使用中文数字读法)、英文数字(强制使用英文数字读法)
* 数字读法:分为 2 个维度设定选项「数字语言」与「数字模式」,数字语言设定数字朗读时使用的地区语音、数字模式分为数值与数字两种
* 中文空白间隔:可设定中文间有空白时,欲停顿长度,数字愈小停顿愈短, 0 为不停顿。
* WorldVoice -> 自动语言切换设定:可设定不同地区所使用的语音角色。
* 先选择地区后语音列表会列出该地区可用的语音,选择后即完成该地区与语音的对应纪录。
* 用 unicode 编码侦测文字语言勾选后,组件会根据读到的字符侦测地区。
* 侦测语言时忽略数字和常见标点符号勾选后,数字与标点符号会认为是默认语音的地区文字。
* WorldVoice -> 语音速度设定:可设定不同语音角色的朗读速度。
* 同样先选择地区后语音列表会列出该地区可用的语音,再选择好语音后,便可于速度滑杆调整数值。
* 速度是依不同语音区分,每个语音有各自不同的速度数值,而非依地区区分。
* Unicode 设定:可定义字符的语言并依上下文或强制模式来判断字符语言,当「用 unicode 编码侦测文字语言」勾选后自动侦测的判断会加入此配置文件的规则。
* 此功能即为了解决 NVDA 内部的 symbol 转换规则造成在自动切换语言下不朗读之问题
* 例如在某些情形下「.」不读取时则可试着在规则中加入「.」的符号并选择语言与模式来使其正确读出
* WorldVoice -> 语音设定:可设定不同地区所使用的语音角色、各别语音角色速度、音调、音量、自动语音切换设定。
* 先选择地区后语音列表会列出该地区可用的语音角色,选择后即完成该地区与语音角色的对应纪录。
* 当语音角色有选择时,下方速度、音调、音量滑杆会变为该语音角色的设定值。
* 速度、音调、音量是依不同语音角色区分,每个语音角色有各自不同的速度数值,而非依地区区分。
* 用 unicode 编码侦测文字语言勾选后,程序会根据读到的字符侦测地区。
* 侦测语言时忽略数字、侦测语言时忽略常见标点符号勾选后,数字与标点符号会判定为默认语音的地区文字。
* Unicode 设定:可定义字符的语言并依上下文或强制模式来判断字符语言,当「用 unicode 编码侦测文字语言」勾选后自动侦测的判断会加入此配置文件的规则,此功能可解决 NVDA 内部的 symbol 转换规则造成在自动切换语言下不朗读之问题。例如在某些情形下「.」不读取时则可试着在规则中加入「.」的符号并选择语言与模式来使其正确读出。
* WorldVoice -> 档案汇入:可汇入档案,可用于汇入核心包与语音包。

## 更新版本日志
Expand Down Expand Up @@ -72,3 +69,14 @@ WorldVoice 是依据 VE driver 为基础开发而成的 addon。运行于 NVDA 2
* 修正 unicode rule 强制模式下后方文字侦测错误
* 修正初始值类型错误导致语音设定对话框无法显示
* 初始语音改优先使用默认语言之语音

### v1.5

* 数字读法分为 2 个设定选项「数字语言」与「数字模式」,将选项分为 2 维度以利选择
* 忽略数字间逗点选项使数值报读更正确
* 自动侦测语言功能当信任语音语言勾选时才使用不同解释档
* 语音设定中的值调整按确认才生效按取消会回到设定前的值
* 修正语音设定中当语音与默认语音相同时调整设定值后重启 NVDA 后回到设定前的值
* 将自动语言切换设定与语音设定窗口合并
* 地区与语音对应加入 no-select 用来取消对应
* 支持快捷键弹出语音设定与 Unicode 设定
30 changes: 19 additions & 11 deletions addon/doc/zh_HK/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,15 @@ WorldVoice 是依據 VE driver 為基礎開發而成的 addon。運行於 NVDA 2

* NVDA+ctrl+S 選擇 WorldVoice 語音合成器。
* NVDA+ctrl+V 有基本語音速度、音調、音量等基本設定,其中數字模式、中文空白間隔為 WorldVoice 多的客製設定。
* 數字模式:有預設(VE 預設的讀法)、自動數字(以預設語音並盡可能以數字報讀)、中文數字(強制使用中文數字讀法)、英文數字(強制使用英文數字讀法)
* 數字讀法:分為 2 個維度設定選項「數字語言」與「數字模式」,數字語言設定數字朗讀時使用的地區語音、數字模式分為數值與數字兩種
* 中文空白間隔:可設定中文間有空白時,欲停頓長度,數字愈小停頓愈短, 0 為不停頓。
* WorldVoice -> 自動語言切換設定:可設定不同地區所使用的語音角色。
* 先選擇地區後語音列表會列出該地區可用的語音,選擇後即完成該地區與語音的對應紀錄。
* 用 unicode 編碼偵測文字語言勾選後,元件會根據讀到的字元偵測地區。
* 偵測語言時忽略數字和常見標點符號勾選後,數字與標點符號會認為是預設語音的地區文字。
* WorldVoice -> 語音速度設定:可設定不同語音角色的朗讀速度。
* 同樣先選擇地區後語音列表會列出該地區可用的語音,再選擇好語音後,便可於速度滑桿調整數值。
* 速度是依不同語音區分,每個語音有各自不同的速度數值,而非依地區區分。
* Unicode 設定:可定義字元的語言並依上下文或強制模式來判斷字元語言,當「用 unicode 編碼偵測文字語言」勾選後自動偵測的判斷會加入此設定檔的規則。
* 此功能即為了解決 NVDA 內部的 symbol 轉換規則造成在自動切換語言下不朗讀之問題
* 例如在某些情形下「.」不讀取時則可試著在規則中加入「.」的符號並選擇語言與模式來使其正確讀出
* WorldVoice -> 語音設定:可設定不同地區所使用的語音角色、各別語音角色速度、音調、音量、自動語音切換設定。
* 先選擇地區後語音列表會列出該地區可用的語音角色,選擇後即完成該地區與語音角色的對應紀錄。
* 當語音角色有選擇時,下方速度、音調、音量滑桿會變為該語音角色的設定值。
* 速度、音調、音量是依不同語音角色區分,每個語音角色有各自不同的速度數值,而非依地區區分。
* 用 unicode 編碼偵測文字語言勾選後,程式會根據讀到的字元偵測地區。
* 偵測語言時忽略數字、偵測語言時忽略常見標點符號勾選後,數字與標點符號會判定為預設語音的地區文字。
* Unicode 設定:可定義字元的語言並依上下文或強制模式來判斷字元語言,當「用 unicode 編碼偵測文字語言」勾選後自動偵測的判斷會加入此設定檔的規則,此功能可解決 NVDA 內部的 symbol 轉換規則造成在自動切換語言下不朗讀之問題。例如在某些情形下「.」不讀取時則可試著在規則中加入「.」的符號並選擇語言與模式來使其正確讀出。
* WorldVoice -> 檔案匯入:可匯入檔案,可用於匯入核心包與語音包。

## 更新版本日誌
Expand Down Expand Up @@ -72,3 +69,14 @@ WorldVoice 是依據 VE driver 為基礎開發而成的 addon。運行於 NVDA 2
* 修正 unicode rule 強制模式下後方文字偵測錯誤
* 修正初始值類型錯誤導致語音設定對話框無法顯示
* 初始語音改優先使用預設語言之語音

### v1.5

* 數字讀法分為 2 個設定選項「數字語言」與「數字模式」,將選項分為 2 維度以利選擇
* 忽略數字間逗點選項使數值報讀更正確
* 自動偵測語言功能當信任語音語言勾選時才使用不同解釋檔
* 語音設定中的值調整按確認才生效按取消會回到設定前的值
* 修正語音設定中當語音與預設語音相同時調整設定值後重啟 NVDA 後回到設定前的值
* 將自動語言切換設定與語音設定視窗合併
* 地區與語音對應加入 no-select 用來取消對應
* 支援快速鍵彈出語音設定與 Unicode 設定
30 changes: 19 additions & 11 deletions addon/doc/zh_TW/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,15 @@ WorldVoice 是依據 VE driver 為基礎開發而成的 addon。運行於 NVDA 2

* NVDA+ctrl+S 選擇 WorldVoice 語音合成器。
* NVDA+ctrl+V 有基本語音速度、音調、音量等基本設定,其中數字模式、中文空白間隔為 WorldVoice 多的客製設定。
* 數字模式:有預設(VE 預設的讀法)、自動數字(以預設語音並盡可能以數字報讀)、中文數字(強制使用中文數字讀法)、英文數字(強制使用英文數字讀法)
* 數字讀法:分為 2 個維度設定選項「數字語言」與「數字模式」,數字語言設定數字朗讀時使用的地區語音、數字模式分為數值與數字兩種
* 中文空白間隔:可設定中文間有空白時,欲停頓長度,數字愈小停頓愈短, 0 為不停頓。
* WorldVoice -> 自動語言切換設定:可設定不同地區所使用的語音角色。
* 先選擇地區後語音列表會列出該地區可用的語音,選擇後即完成該地區與語音的對應紀錄。
* 用 unicode 編碼偵測文字語言勾選後,元件會根據讀到的字元偵測地區。
* 偵測語言時忽略數字和常見標點符號勾選後,數字與標點符號會認為是預設語音的地區文字。
* WorldVoice -> 語音速度設定:可設定不同語音角色的朗讀速度。
* 同樣先選擇地區後語音列表會列出該地區可用的語音,再選擇好語音後,便可於速度滑桿調整數值。
* 速度是依不同語音區分,每個語音有各自不同的速度數值,而非依地區區分。
* Unicode 設定:可定義字元的語言並依上下文或強制模式來判斷字元語言,當「用 unicode 編碼偵測文字語言」勾選後自動偵測的判斷會加入此設定檔的規則。
* 此功能即為了解決 NVDA 內部的 symbol 轉換規則造成在自動切換語言下不朗讀之問題
* 例如在某些情形下「.」不讀取時則可試著在規則中加入「.」的符號並選擇語言與模式來使其正確讀出
* WorldVoice -> 語音設定:可設定不同地區所使用的語音角色、各別語音角色速度、音調、音量、自動語音切換設定。
* 先選擇地區後語音列表會列出該地區可用的語音角色,選擇後即完成該地區與語音角色的對應紀錄。
* 當語音角色有選擇時,下方速度、音調、音量滑桿會變為該語音角色的設定值。
* 速度、音調、音量是依不同語音角色區分,每個語音角色有各自不同的速度數值,而非依地區區分。
* 用 unicode 編碼偵測文字語言勾選後,程式會根據讀到的字元偵測地區。
* 偵測語言時忽略數字、偵測語言時忽略常見標點符號勾選後,數字與標點符號會判定為預設語音的地區文字。
* Unicode 設定:可定義字元的語言並依上下文或強制模式來判斷字元語言,當「用 unicode 編碼偵測文字語言」勾選後自動偵測的判斷會加入此設定檔的規則,此功能可解決 NVDA 內部的 symbol 轉換規則造成在自動切換語言下不朗讀之問題。例如在某些情形下「.」不讀取時則可試著在規則中加入「.」的符號並選擇語言與模式來使其正確讀出。
* WorldVoice -> 檔案匯入:可匯入檔案,可用於匯入核心包與語音包。

## 更新版本日誌
Expand Down Expand Up @@ -72,3 +69,14 @@ WorldVoice 是依據 VE driver 為基礎開發而成的 addon。運行於 NVDA 2
* 修正 unicode rule 強制模式下後方文字偵測錯誤
* 修正初始值類型錯誤導致語音設定對話框無法顯示
* 初始語音改優先使用預設語言之語音

### v1.5

* 數字讀法分為 2 個設定選項「數字語言」與「數字模式」,將選項分為 2 維度以利選擇
* 忽略數字間逗點選項使數值報讀更正確
* 自動偵測語言功能當信任語音語言勾選時才使用不同解釋檔
* 語音設定中的值調整按確認才生效按取消會回到設定前的值
* 修正語音設定中當語音與預設語音相同時調整設定值後重啟 NVDA 後回到設定前的值
* 將自動語言切換設定與語音設定視窗合併
* 地區與語音對應加入 no-select 用來取消對應
* 支援快速鍵彈出語音設定與 Unicode 設定
13 changes: 12 additions & 1 deletion addon/generics/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,12 @@ def __init__(self, parent):


class SpeechSymbolsDialog(SettingsDialog):
helpId = "SymbolPronunciation"
_instance = None

def __new__(cls, *args, **kwargs):
obj = super(SpeechSymbolsDialog, cls).__new__(cls, *args, **kwargs)
cls._instance = obj
return obj

def __init__(self,parent):
# Translators: This is the label for the unicode setting dialog.
Expand Down Expand Up @@ -296,6 +301,10 @@ def OnRemoveClick(self, evt):
self.symbolsList.sendListItemFocusedEvent(index)
self.symbolsList.SetFocus()

def onCancel(self, event):
self.__class__._instance = None
super(SpeechSymbolsDialog, self).onCancel(event)

def onOk(self, evt):
self.onSymbolEdited()
self.editingItem = None
Expand All @@ -315,6 +324,8 @@ def onOk(self, evt):
_("unicode rule edited"),wx.OK|wx.CANCEL|wx.ICON_WARNING,self
)==wx.OK:
queueHandler.queueFunction(queueHandler.eventQueue,core.restart)

self.__class__._instance = None
super(SpeechSymbolsDialog, self).onOk(evt)

def _refreshVisibleItems(self):
Expand Down
43 changes: 36 additions & 7 deletions addon/globalPlugins/WorldVoiceXVED2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,15 @@
import globalVars
import gui
from logHandler import log
from scriptHandler import script
import speech
import ui

from .languageSettingsDialog import LanguageSettingsDialog
from .speechSettingsDialog import SpeechSettingsDialog
from generics.views import SpeechSymbolsDialog

ADDON_SUMMARY = addonHandler.getCodeAddon().manifest["summary"]
SpeechSettingsDialog = SpeechSettingsDialog()

class GlobalPlugin(globalPluginHandler.GlobalPlugin):
def __init__(self):
Expand All @@ -45,12 +48,10 @@ def initialize(self):
def createMenu(self):
self.submenu_vocalizer = wx.Menu()
if self.ve:
item = self.submenu_vocalizer.Append(wx.ID_ANY, _("Automatic &Language Switching Settings"), _("Configure which voice is to be used for each language."))
gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU , lambda e : gui.mainFrame._popupSettingsDialog(LanguageSettingsDialog()), item)
item = self.submenu_vocalizer.Append(wx.ID_ANY, _("&Speech Settings"), _("Configure speech rate each voice."))
gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU , lambda e : gui.mainFrame._popupSettingsDialog(SpeechSettingsDialog()), item)
item = self.submenu_vocalizer.Append(wx.ID_ANY, _("&Unicode Settings"), _("Configure unicode setting."))
gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU , lambda e : gui.mainFrame._popupSettingsDialog(SpeechSymbolsDialog), item)
item = self.submenu_vocalizer.Append(wx.ID_ANY, _("&Speech Settings"), _("Speech Settings."))
gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU, self.popup_SpeechSettingsDialog, item)
item = self.submenu_vocalizer.Append(wx.ID_ANY, _("&Unicode Settings"), _("Unicode Settings."))
gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU , self.popup_SpeechSymbolsDialog, item)
item = self.submenu_vocalizer.Append(wx.ID_ANY, _("&File Import"), _("Import File."))
gui.mainFrame.sysTrayIcon.Bind(wx.EVT_MENU , self.onFileImport, item)
self.submenu_item = gui.mainFrame.sysTrayIcon.menu.Insert(2, wx.ID_ANY, _("WorldVoice(VE)"), self.submenu_vocalizer)
Expand Down Expand Up @@ -99,3 +100,31 @@ def terminate(self):
self.removeMenu()
except wx.PyDeadObjectError:
pass

def popup_SpeechSettingsDialog(self, event):
if SpeechSettingsDialog._instance is None:
gui.mainFrame._popupSettingsDialog(SpeechSettingsDialog)
else:
ui.message(_("SpeechSettingsDialog have already been opened"))

def popup_SpeechSymbolsDialog(self, event):
if SpeechSymbolsDialog._instance is None:
gui.mainFrame._popupSettingsDialog(SpeechSymbolsDialog)
else:
ui.message(_("SpeechSymbolsDialog have already been opened"))

@script(
gesture="kb:NVDA+alt+s",
description=_("popup SpeechSettingsDialog"),
category=ADDON_SUMMARY,
)
def script_popup_SpeechSettingsDialog(self, gesture):
self.popup_SpeechSettingsDialog(None)

@script(
gesture="kb:NVDA+alt+u",
description=_("popup SpeechSymbolsDialog"),
category=ADDON_SUMMARY,
)
def script_popup_SpeechSymbolsDialog(self, gesture):
self.popup_SpeechSymbolsDialog(None)
Loading

0 comments on commit 6d0c2ba

Please sign in to comment.