성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>SpeechRecognitionEngine 사용 시 오류 유형 2가지</h1> <p> (업데이트: 2023-03-30) 이 글에 대한 질문은 더 이상 받지 않습니다. (하시다 보면, 제가 왜 이 기술에 대해 흥미를 못 느끼는 지 아시게 될 것입니다. ^^ SpeechRecognitionEngine에 특별한 업데이트가 없는 한 다루지 않을 것입니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 생각했던 것보다, 음성인식에 대한 관심이 많은 것 같습니다. 예전에 썼던 다음의 글이 조회수가 5,000에 육박하고 있으니까요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C#으로 만드는 음성인식/TTS 프로그램 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1228'>http://www.sysnet.pe.kr/2/0/1228</a> </pre> <br /> 이번 글은, 아래의 질문에 포함된 예제를 실행해 보면서 겪은 오류 내용을 정리한 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 음성인식 TTS 관련해서 질문드립니다 ; <a target='tab' href='http://www.sysnet.pe.kr/3/0/1142'>http://www.sysnet.pe.kr/3/0/1142</a> </pre> <br /> 제가 "<a target='tab' href='http://www.sysnet.pe.kr/2/0/1228'>C# 으로 만드는 음성인식/TTS 프로그램</a>" 글을 쓴 이후로 노트북이 바뀌어서 전혀 환경 구성이 안되어 있었는데요. 그래도 일단 "<a target='tab' href='http://www.sysnet.pe.kr/3/0/1142'>음성인식 TTS 관련해서 질문드립니다</a>" 글에 첨부된 소스 코드를 무작정 빌드해서 실행해 보았습니다.<br /> <br /> 그랬더니, 다음의 코드를 실행할 때 오류가 발생하는 군요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SpeechRecognitionEngine recognizer = <span style='color: blue; font-weight: bold'>new SpeechRecognitionEngine("SR_MS_ko-KR_TELE_11.0");</span> </pre> <br /> 예외 메시지는 다음과 같습니다.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> Retrieving the COM class factory for component with CLSID {49428A60-C997-4D0E-9808-9E326C178D58} failed due to the following error: <span style='color: blue; font-weight: bold'>80040154 Class not registered</span> (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). </div><br /> <br /> 이는 제 컴퓨터에 "Speech Platform"이 설치되어 있지 않아서 그런 것입니다. 따라서, 아래의 사이트에서 런타임을 다운로드 받고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Microsoft Speech Platform - Runtime 11.0 ; <a target='tab' href='http://go.microsoft.com/fwlink/?LinkID=223568'>http://go.microsoft.com/fwlink/?LinkID=223568</a> Microsoft Speech Platform - Runtime Languages (Version 11) - 한글 음성인식: MSSpeech_SR_ko-KR_TELE.msi ; <a target='tab' href='http://www.microsoft.com/download/en/details.aspx?id=27224'>http://www.microsoft.com/download/en/details.aspx?id=27224</a> </pre> <br /> 다시 시도해 보니, 잘 됩니다.<br /> <br /> 그 외에 이 오류가 발생할 수 있는 또 한 가지 상황이 있습니다. COM 개체의 특성상 레지스트리 등록 시에 x86/x64를 가리게 되는데요. 이 때문에 64비트 운영체제에 "x64_SpeechPlatformRuntime\SpeechPlatformRuntime.msi"을 설치했다면 당연히 .NET 응용 프로그램도 x64로 동작해야 합니다. 만약 x86으로 빌드했다면 COM 개체의 레지스트리 경로가 달라지기 때문에 "Class not registered"가 떨어지는 것이 맞는 결과입니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 다음의 상황에서 LoadGrammar 메서드 실행 시에 오류가 발생할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine("SR_MS_<span style='color: blue; font-weight: bold'>ko-KR</span>_TELE_11.0"); Choices colors = new Choices(); colors.Add(new string[] { <span style='color: blue; font-weight: bold'>"빨강", "파랑", "초록"</span> }); GrammarBuilder gb = colors.ToGrammarBuilder(); Grammar g = new Grammar(gb); <span style='color: blue; font-weight: bold'>recognizer.LoadGrammar(g);</span> // 오류 발생 </pre> <br /> 예외 메시지는 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > System.InvalidOperationException was unhandled HResult=-2146233079 Message=<span style='color: blue; font-weight: bold'>The language for the grammar does not match the language of the speech recognizer.</span> Source=Microsoft.Speech StackTrace: at Microsoft.Speech.Recognition.RecognizerBase.ThrowIfSapiErrorCode(SAPIErrorCodes errorCode) at Microsoft.Speech.Recognition.MemoryGrammarContent.Load(SapiGrammar sapiGrammar, Boolean enabled, Single weight, Int32 priority) at Microsoft.Speech.Recognition.GrammarContent.Load(SapiGrammar sapiGrammar) at Microsoft.Speech.Recognition.Grammar.Load(SapiGrammar sapiGrammar, IRecognizerInternal recognizer) ...[생략]... at System.Threading.ThreadHelper.ThreadStart() InnerException: </pre> <br /> 오류 메시지에 따르면 언어가 달라서 그런 것입니다. 이런 경우에는 GrammarBuilder 인스턴스에 언어를 다음과 같이 설정해 주면 해결됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine("SR_MS_ko-KR_TELE_11.0"); Choices colors = new Choices(); colors.Add(new string[] { "빨강", "파랑", "초록" }); GrammarBuilder gb = new GrammarBuilder(); <span style='color: blue; font-weight: bold'>gb.Culture = new System.Globalization.CultureInfo("ko-KR");</span> gb.Append(colors); Grammar g = new Grammar(gb); recognizer.LoadGrammar(g); </pre> <br /> <hr style='width: 50%' /><br /> <br /> "<a target='tab' href='http://www.sysnet.pe.kr/3/0/1142'>음성인식 TTS 관련해서 질문드립니다</a>" 글에 첨부된 소스 코드에서 초기화를 Form1_Load에서 하고 있는데요. x64 + 윈폼 + Visual Studio 디버그 상태에서는 Form1_Load에서 오류가 발생하는 경우 문제를 찾기가 좀 힘듭니다.<br /> <br /> 왜냐하면, 그와 같은 조합의 상황에서 예외가 발생하면 Visual Studio는 예외를 먹어버리고 프로그램은 그냥 비정상 종료되어 버립니다. 그나마 Visual Studio의 디버그 창에 다음과 같은 메시지가 남아 있는 정도인데요.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > The program '[19588] WindowsFormsApplication3.exe: Managed (v4.0.30319)' has exited with code -1073741819 (0xc0000005) 'Access violation'. </pre> <br /> 이것은, Windows Forms 응용 프로그램의 고질적인 문제로 x64 응용 프로그램에서만 발생하는 문제입니다. 예전에 한번 이와 관련해서 쓴 적이 있지요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Windows Form의 Load 이벤트에서 발생하는 예외가 Visual Studio에서 잡히지 않는 문제 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1107'>http://www.sysnet.pe.kr/2/0/1107</a> </pre> <br /> 이런 것이 있다는 것을 참고하시고 디버깅하시면 도움이 될 것입니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1978
(왼쪽의 숫자를 입력해야 합니다.)