這裏是我想出了:
正如@邁克爾利維說,當你給它一個詞來聽電腦並沒有做太多的工作。它基本上只是監聽音頻電平何時達到某個值,然後假定它必須是該單詞。所以我決定,我必須給它與SOUND相反的其他詞語。現在我的目標不是花數週時間研究語音學,而是找出一個完美的算法來確定那些聽起來遠離我想匹配的單詞的單詞,所以我決定專注於第一個字母。下面是操作順序:
- 提取觸發字從XML文件進行操作的幻燈片
- 查找單詞
- 的第一個字母查找3個字母是最不像信的步驟發現聲音2
- 查找4個字的變長,音節計數,結束音,和第二個字母與每個在步驟中找到的三個字母的開始3
- Add找到所有12個字,在步驟4的選擇列表,以及沿觸發詞。現在有13個字。一個是我們找到的單詞,另外一個是12個單詞。因此,計算機將織補確保它是正確的之前觸發任何事件處理程序:)
我們判斷相反的字母,我發佈了一個問題here,但它得到了關閉之前,我得到任何有用的意見) :我不知道爲什麼,我查看了常見問題解答,看起來我是按照這裏描述的條款。我決定對我的家人和朋友進行投票,而我們的綜合智慧提出了一個對立的名單。每個字母都有三個字母,儘可能地讓它們遠離原始字母聲音。
最後一步是爲這些字母中的每一個查找單詞。我發現每個字母四個字,共104個字。我想要不同長度,第二個字母和結尾聲音的單詞,這樣我就可以覆蓋所有的基礎,儘可能「分散」計算機遠離目標單詞。我用這個University Vocab List想出了大話,用我小小的英語頭腦寫出了5個字母,最後我覺得我有一個很好的名單。我使用XML格式化它,添加解析代碼,並檢查結果.....好得多!幾乎太好了!沒有誤報,有些人的表達能力不好,將會很難使用我的程序!我將使它更容易一些,也許是通過去除分心詞的數量,但總體來說我還是很高興的結果,並讚賞@邁克爾·利維和@Kevin榮漢斯
代碼的建議:
<?xml version="1.0" encoding="utf-8" ?>
<list>
<a opposite="m,q,n">abnegate,apple,argent,axe</a>
<b opposite="k,l,s">berate,barn,bored,battology</b>
<c opposite="v,r,j">chrematophobia,cremate,cease,camoflauge</c>
<d opposite="l,q,w">dyslogy,distemper,dog,dilligent</d>
<e opposite="j,n,k">exoteric,esoteric,enumerate,elongate</e>
<f opposite="g,i,t">flagitious,flatulate,fart,funeral</f>
<g opposite="f,v,z">gracile,grace,garner,guns</g>
<h opposite="q,d,x">hebetate,health,habitat,horned</h>
<i opposite="m,n,f">isomorphic,inside,iterate,ill</i>
<j opposite="c,e,x">jape,juvenescent,jove,jolly</j>
<k opposite="l,w,v">kinetosis,keratin,knack,kudos</k>
<l opposite="b,d,g">lactate,lord,limaceous,launder</l>
<m opposite="v,i,f">malaria,mere,morbid,murcid</m>
<n opposite="h,r,v">name,nemesis,noon,nuncheon</n>
<o opposite="b,n,j">orarian,opiate,opossum,oculars</o>
<p opposite="n,m,d">pharmacist,phylogeny,pelt,puny</p>
<q opposite="d,h,f">query,quack,quick,quisquous</q>
<r opposite="c,f,x">random,renitency,roinous,run</r>
<s opposite="b,y,d">sand,searing,sicarian,solemn,</s>
<t opposite="l,m,f">tart,treating,thunder,thyroid</t>
<u opposite="f,g,j">unasinous,unit,ulcer,unthinkable</u>
<v opposite="c,k,m">version,visceral,vortex,vulnerable</v>
<w opposite="d,k,n">wand,weasiness,whimsical,wolf</w>
<x opposite="m,l,p">xanthopsia,xanthax,xylophone,xray</x>
<y opposite="s,j,d">yellow,york,yuck,ylem</y>
<z opposite="m,n,g">zamboni,zip,zoology,zugzwang </z>
</list>
解析代碼:
private Dictionary<string, List<string>> opposites;
private Dictionary<string, List<string>> words = new Dictionary<string, List<string>>();
private void StartSpeechRecognition(Media_Slide slide)
{
if (opposites == null)
{
opposites = new Dictionary<string, List<string>>();
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
string file = System.IO.Path.GetDirectoryName(Assembly.GetAssembly(typeof(MainWindow)).CodeBase).Remove(0, 6) + "\\buzzlist.xml";
doc.Load(file);
foreach (System.Xml.XmlNode node in doc.ChildNodes[1].ChildNodes)
{
opposites.Add(node.Name, new List<string>(node.Attributes[0].InnerText.Split(',')));
words.Add(node.Name, new List<string>(node.InnerText.Split(',')));
}
}
speechSlide = slide;
rec = new SpeechRecognitionEngine();
rec.SpeechRecognized += rec_SpeechRecognized;
rec.SetInputToDefaultAudioDevice();
try
{
rec.LoadGrammar(GetGrammar());
rec.RecognizeAsync(RecognizeMode.Multiple);
}
catch
{
}
}
檢查代碼:
void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text == speechSlide.Scenes[speechSlide.currentslide].speechCue)
{
rec.UnloadAllGrammars();
ScreenSettings.NextSlide(speechSlide);
try
{
rec.LoadGrammar(GetGrammar());
}
catch
{
rec.RecognizeAsyncCancel();
}
}
}
而不是寫此F從頭開始,您可能想看看來自Microsoft的開源項目Mayhem [http://makemayhem.com/],它允許您使用觸發器或操作來連接事件。他們已經有了用於語音錄製的附加模塊和一個可以控制PowerPoint幻燈片的Office模塊。 –
我會看看,謝謝你的幫助凱文。 –