나는 논리가 너무 복잡하다고 믿습니다. 나는 지나치게 단순화시킬지도 모르지만 ... :)
하나의 파일에 모든 문법을 포함 할 수 있습니다. 초기 명령을 청취 할 때 코드에서 후속 조치를 수신 대기하는 플래그를 설정하십시오.
<grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0" xmlns="http://www.w3.org/2001/06/grammar">
<rule id="rootRule">
<one-of>
<item>
<tag>out.SysCommand = "STATUS";</tag>
Computer what is the system status
</item>
<item>
<tag>out.SysCommand = "PASSWORD";</tag>
Gamma
<one-of>
<item>Four</item>
<item>Forty</item>
</one-of>
Seven Echo
</item>
</one-of>
</root>
</grammar>
콜백은 다음과 같을 수 있습니다 :
이
private void OnSpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Confidence >= ConfidenceThreshold)
{
if (IsListening)
{
if (e.Result.Semantics["SysCommand"] != null)
{
switch (e.Result.Semantics["SysCommand"].Value.ToString())
{
case "PASSWORD":
// The was waiting for this, now you can act on it
break;
default:
// something else was said, reset!
break;
}
}
}
else if (e.Result.Semantics["SysCommand"] != null)
{
if (e.Result.Semantics["SysCommand"].Value.ToString() == "STATUS")
{
// do stuff that prompts user for password
IsListening = true;
}
}
}
}
콜백은 "IsListening"플래그를 찾습니다 여기
은 (간체) 문법 세트입니다. 설정되지 않은 경우 상태 요청 여부를 확인합니다. 그렇게했다면 플래그를 설정하고 이제 비밀번호를 기다립니다.
위 코드를 간소화 할 수 있습니다. 나는 그것을 복사하고 내가했던 것과 비슷한 것을 빠르게 편집했다.
- 보여주는 시스템의 이름 ("플로이드")
- 설정 "IsListening"플래그
- 디스플레이 화면에 프롬프트 (가시성 플래그를 IsListening에 바인딩)를 수신 : 내 경우, 나는 다음을 수행 가능한 후속는
- 그 명령에 대해 듣고
당신은로드하고 필요에 따라 새로운 문법을 언로드하지만 문법 파일이 큰 도착하지 않는 한, 그로드/언로드의 오버 헤드 것 수있는 일 적절하게 행동 명령 하나의 세트에서 몇 가지 추가 문법 규칙을 빠르게 살펴볼 수 있습니다.