Juliusを使って音声でPowerPointを操作
Juliusのページのサンプルを参考に。
// PowerPoint (事前にスライドショーを実行しておく) var ppt = WScript.CreateObject("PowerPoint.Application"); if(ppt.SlideShowWindows.Count == 0) WScript.Quit(); ppt.SlideShowWindows.Item(1).Activate(); var show = ppt.SlideShowWindows.Item(1).View; // SAPI var reco = WScript.CreateObject("Sapi.SpSharedRecognizer"); var Ctxt = reco.CreateRecoContext(); WScript.ConnectObject(Ctxt, "Ctxt_"); Ctxt.EventInterests = 18; var GramCommand_Attendant; var GramCommand_YesNo; var DialogState = 0; var NameString = ""; StartDialog(); while(true){ WScript.Sleep(500); } function StartDialog(){ GramCommand_YesNo = Ctxt.CreateGrammar(0); GramCommand_YesNo.CmdLoadFromFile("./sapi/go.xml", 0); GramCommand_YesNo.CmdSetRuleState("S", 1); } function Ctxt_Recognition(StreamNum, StreamPos, RecogType, Result){ print(Result.PhraseInfo.GetText()) try{ var prop = Result.PhraseInfo.Properties; if(prop.Item(0).Value == 0) show.Next(); else show.Previous(); } catch(e){ print(e.description) } } function print(s){ WScript.Echo(s); }
文法の方もサンプルをちょっとだけ変える。
<?xml version="1.0" encoding="UTF-8"?> <GRAMMAR> <RULE name="S" toplevel="ACTIVE"> <L PROPNAME="NB"> <P VAL="0"> <RULEREF name="NEXT"/> </P> <P VAL="1"> <RULEREF name="BACK"/> </P> </L> </RULE> <RULE name="NEXT" toplevel="INACTIVE"> <L> <P>つぎ</P> <P>/つぎ/つーぎ;</P> </L> </RULE> <RULE name="BACK" toplevel="INACTIVE"> <L> <P>まえ</P> <P>/まえ/まーえ;</P> </L> </RULE> </GRAMMAR>
ありがちなネタだけど、とても簡単にできるんだなあ。