NVDA、争渡读屏语音开放API接口


什么是读屏软件?
读屏软件是一种专为视力障碍人士设计的,能够辅助视障人士操作计算机的工具,它可以将屏幕上显示的内容用语音朗读出来,这样视障人士就可以正常使用电脑了。
知名的屏幕阅读软件国内有争渡读屏、阳光读屏等,其中争渡读屏在国内最受欢迎,有免费的公益版。
国外有完全免费开源的NVDA,Windows 系统内置的讲述人(narrator)等。
目前争渡读屏和NVDA开放了语音接口,也就是说,开发者可以主动调用争渡或NVDA的语音接口朗读文本。
软件可以调用屏幕阅读器朗读信息,不仅仅是屏幕阅读器被动获取要朗读的内容。

本文主要采用C#演示争渡读屏和NVDA语音接口调用示例。

一、争渡读屏()
下载地址:http://zdsr.com/
争渡读屏语音接口可以让应用程序发送文本给争渡读屏进行朗读。
采用Win32DLL调用方式。
应用程序把接口dll放入自己应用目录下调用即可使用。
DLL可以在争渡读屏安装目录"C:\Program Files (x86)\zdsr\zdsr"获得。
32位接口:ZDSRAPI.dll;
64位接口:ZDSRAPI_x64.dll;
1.初始化语音接口
int WINAPI InitTTS(int channelType, WCHAR* channelName)
参数:
[in] int channelType: 0 读屏通道 1 独立通道,传入0;
[in] WCHAR* channelName 独立通道名称, channelType 0时传入NULL忽略
返回值:
0:成功
1:版本不匹配
2.朗读文本
int WINAPI Speak(WCHAR* text, BOOL bInterrupt)
参数:
[in] WCHAR* text: 要朗读的文本,Unicode
[in] BOOL bInterrupt: TRUE:清空排队,立刻打断朗读, FALSE:等待空闲时朗读
返回值:
0: 成功
1: 版本不匹配
2: ZDSR没有运行
3.获取朗读状态
int WINAPI GetSpeakState()
返回值:
1: 版本不匹配
2: ZDSR没有运行
3: 正在朗读
4: 没有朗读
4.停止朗读
void WINAPI StopSpeak()
返回值: void
C#平台调用声明如下(请将DLL放在应用程序同目录下的API文件夹内):
[DllImport(@"api\zdsrapi.dll", CharSet = CharSet.Unicode, EntryPoint = "InitTTS")] extern public static int ZD_InitTTS(int channelType, string channelName);
[DllImport(@"api\zdsrapi.dll", CharSet = CharSet.Unicode, EntryPoint = "Speak")] extern public static int ZD_Speak(string text, bool interrupt = true);
[DllImport(@"api\zdsrapi.dll", EntryPoint = "GetSpeakState")] extern public static int ZD_GetSpeakState();
[DllImport(@"api\zdsrapi.dll", EntryPoint = "StopSpeak")] extern public static void ZD_StopSpeak();
二、NVDA
NVDA屏幕阅读器下载:https://nvaccess.org/
语音SDK下载(内涵C#、Python、C/C++调用示例): https://share.weiyun.com/hzalIHPU
此 API 允许应用程序向 NVDA 通信,以便执行诸如朗读文本或输出盲文等功能。
API 以 dll(动态链接库)的形式提供。此 dll 中的功能可以从支持查找和调用 dll 中任何符号的任何编程语言(如 Python 中的 ctys)或链接到 dll 中的任意编程语言中调用,用于 C、C++和C#等语言。
C#调用示例(请将DLL放在应用程序同目录下的API文件夹内并改名为"NVDASpeech.dll"):
[DllImport(@"api\NvdaSpeech.dll", CharSet = CharSet.Unicode)] public static extern int nvdaController_brailleMessage(string message); // 调用NVDA输出盲文
[DllImport(@"api\NvdaSpeech.dll")] public static extern int nvdaController_cancelSpeech(); // 停止 NVDA 朗读
[DllImport(@"api\NvdaSpeech.dll", CharSet = CharSet.Unicode)] public static extern int nvdaController_speakText(string text); // 调用 NVDA 朗读文本
[DllImport(@"api\NvdaSpeech.dll")] public static extern int nvdaController_testIfRunning(); // 检查 NVDA 是否运行(返回 0 表示NVDA处于运行中)