2

我购买了AddTapi.NET的许可证,以简化我在作为 Windows 服务运行的产品中使用 TAPI 的开发。我能够在 Windows GUI 和控制台应用程序中使用 TAPI,并将代码移植到我的 Windows 服务中。那时,我注意到使用语音 API(如 TapiCall.Speak 或 TapiCall.Play(wavefile))的代码没有在电话线上产生声音并且保持沉默。

之前有几个问题可能与我的问题有关。

问题:从 Windows 服务通过调制解调器播放语音表示使用语音时出现问题,该问题已通过在 Windows 服务中生成 GUI 线程来解决。我试图这样做,但未能在电话中听到演讲。

问题:Windows 服务中的 Tapi 访问冲突似乎表明服务中的 TAPI 存在初始问题,但使用 AddTapi 产品已解决。该票并未明确提及语音 API 的使用(SAPI)

我正在使用 Visual Studio 2010 和 .NET 4.0 在 C# 中编程。我正在尝试让它在 Windows 7 上运行。我收到了一封来自 AddTapi 的电子邮件,表明 Microsoft 更改了安全性以禁止使用 Win 2008 Server、Windows Vista 和 Windows 7 中的服务中的语音子系统。以上文章似乎表明 AddTapi 取得了一些成功,尽管它可能不在 Windows 7 上。

鉴于我正在使用的主要系统是 Windows 服务(和子进程),这似乎是让语音正常工作的最佳方法。如果我将 SAPI 代码放在控制台应用程序中,我希望在不需要用户主动登录到计算机的情况下对其进行管理。我的 TAPI 代码没有任何图形。我应该采取类似于文章的方法:启动交互式进程并生成交互式进程吗?有没有在 Windows 服务中使用 TAPI 语音的成功案例?

4

2 回答 2

1

我们在 AddTapi.NET 5.0 中解决了这个问题。5.0 版可以在 Windows 服务应用程序中使用语音 API(TapiCall.Speak 和 TapiCall.Play)。无需使用单独的进程,服务可以在默认的本地服务帐户下运行。

对于不使用 AddTapi.NET 的每个人来说,关键是使用 SAPI5 SpVoice 对象与自定义流对话。您无法在 Windows 服务中实例化 SpAudio 或 SpMMAudioOut 对象,因此您需要实现自己的流类并将 SpVoice 的输出设置为该流。

于 2014-11-22T22:05:50.973 回答
0

我有与您的项目相同的要求(使用 AddTapi.NET 的 Windows 服务中的 TAPI)。我也收到了同样的回复。我尝试了其他一些帖子,建议我在单独的线程中运行应用程序,因此我使用了整个解决方案并将其转换为 WPF 应用程序,该应用程序具有一个永远不会出现但所有 AddTapi 配置都发生在构造函数中的简单页面.

没有成功。

当从 WPF 应用程序运行时,应用程序可以正常运行,但是当 WPF 页面在启用 STAThread 的线程中实例化时,Play and Speak 仍然无法工作。我一直在寻找这个问题的答案,但除了其他人说真的没有解决方案(没有真正的解决方案)之外,什么都没有。

通过单独的进程运行我的应用程序根本不会削减它,并且由于在单独的线程中运行也不起作用,我将不得不考虑将此应用程序作为常规 Windows 应用程序运行(需要登录)。

希望我有一个解决方案,对不起。

于 2012-07-31T14:26:57.443 回答