2012-07-23 5 views
1

Windows 서비스로 실행되는 제품에서 TAPI를 사용하여 개발 작업을 간소화하기 위해 AddTapi.NET 라이센스를 구입했습니다. Windows GUI 및 콘솔 응용 프로그램에서 TAPI를 사용할 수 있었고 코드를 Windows 서비스로 이식 할 수있었습니다. 그 시점에서 필자는 TapiCall.Speak 나 TapiCall.Play (웨이브 파일)와 같은 음성 API를 사용하는 코드가 전화선에서 사운드를 생성하지 않고 침묵하고 있다고 지적했습니다.Windows 서비스에서 TAPI 음성 사용

내 문제와 관련된 몇 가지 이전 질문이 있습니다.

Question: Playing Voice over a modem from a Windows service은 Windows 서비스에서 GUI 스레드를 생성하여 해결 된 음성을 사용하여 문제가 발생했음을 나타냅니다. 나는이 일을 시도했지만 전화로 연설을 듣는 데 실패했습니다.

Question: Access violation with Tapi in Windows service은 서비스의 TAPI에 초기 문제가 있음을 나타 냈지만 아직 AddTapi 제품을 사용하여 해결되었습니다. 티켓에는 명시 적으로 음성 API 사용에 대한 언급이 없습니다 (SAPI)

Visual Studio 2010 및 .NET 4.0을 사용하여 C#에서 프로그래밍 중입니다. Windows 7에서 작동하게하려고합니다. Microsoft에서 Windows 2008, Windows Vista 및 Windows 7 서비스의 음성 하위 시스템 사용을 허용하지 않도록 보안을 변경했음을 나타내는 AddTapi의 전자 메일을 받았습니다. 위 기사가 Windows 7에 없더라도 기사가 AddTapi에서 성공을 거둔 것으로 보입니다.

내가 작업하는 주 시스템이 Windows 서비스 (및 하위 프로세스)라는 점을 감안할 때 가장 좋은 방법은 무엇입니까? 연설이 효과를 발휘합니다. SAPI 코드를 콘솔 응용 프로그램에 넣으면 사용자가 컴퓨터에 로그온하지 않아도 SAPI 코드를 관리하고 싶습니다. 내 TAPI 코드에 대한 그래픽은 없습니다. Article: Launching an interactive process과 유사한 접근 방식을 취하여 대화 형 프로세스를 생성해야합니까? Windows 서비스에서 TAPI 연설을 사용한 성공 사례가 있습니까?

답변

0

나는 프로젝트 (AddTapi.NET을 사용하는 Windows 서비스의 TAPI)와 동일한 요구 사항을 가졌습니다. 나도 같은 반응을 받았다. 나는 거기에 다른 게시물 중 일부를 시도해 거기에 별도의 스레드에서 응용 프로그램을 실행하는 그래서 내 전체 솔루션을 도구 및 WPF 응용 프로그램을 결코 나타나지 않지만 생성자에서 일어나는 모든 AddTapi 구성을 가진 간단한 페이지로 변환 .

NO SUCCESS.

WPF 응용 프로그램에서 실행할 때 응용 프로그램이 정상적으로 실행되지만 WPF 페이지가 STAThread 활성화 된 스레드에서 인스턴스화 된 경우 재생 및 말하기가 여전히 작동하지 않습니다. 나는 이것에 대한 답을 찾기 위해 온통 찾고 있었지만 아무런 해결책도 없다는 것을 다른 사람들은 알 수 없다.

별도의 프로세스를 통해 내 응용 프로그램을 실행하면 별도의 스레드가 실행되지 않으므로이 응용 프로그램을 일반 Windows 응용 프로그램으로 실행해야합니다 (로그온 필요) .

위시 나는 해결책을 가졌다.

+0

1 주일에 2 번보고 나서 Windows 작업 스케줄러를 사용하여 Windows 서비스를 작업으로 옮겨 보았습니다. 이를 통해 응용 프로그램 시작 및 중지에 대한 제어권을 얻을 수있었습니다. 확실히 말해서, 사용자가 로그온 한 경우에도 '사용자가 로그온했는지 여부를'실행하여 작업을 구성하면 SAPI가 작동하지 않습니다. '사용자가 로그온 할 때만 실행'으로 설정을 변경하면 예약 된 작업이 SAPI 재생 및 말하기 옵션으로 정상적으로 작동했습니다. 사용자가 항상 로그온하도록하는 것은 바람직하지 않지만 지금은 유일한 해결책 인 것 같습니다. –

1

우리는 AddTapi.NET 5.0에서이 문제를 해결했습니다. 버전 5.0은 Windows 서비스 응용 프로그램에서 Speech API (TapiCall.Speak 및 TapiCall.Play)를 사용할 수 있습니다. 별도의 프로세스를 사용할 필요가 없으며 서비스가 기본 로컬 서비스 계정에서 실행될 수 있습니다.

AddTapi.NET을 사용하지 않는 모든 사용자에게 중요한 점은 SAPI5 SpVoice 객체를 사용하여 사용자 지정 스트림을 사용하는 것입니다. Windows 서비스에서 SpAudio 또는 SpMMAudioOut 객체를 인스턴스화 할 수 없으므로 자체 스트림 클래스를 구현하고 SpVoice의 출력을 해당 스트림으로 설정해야합니다.