2016-11-19 72 views
-1

我一直在使用Microsoft Speech API(SAPI,5.3)爲我的應用程序(Windows,顯然,C++,Win8 SDK)添加語音識別支持,除了一些與加載語法有關的箍跳轉文件工作得很好。SAPI規則枚舉

但是,我無法弄清楚如何枚舉從文件加載的語法中的規則(或者甚至可能)。顯然,當您手動/動態地構建語法時,您自己正在創建規則。但是,沒有出現是從文件加載的語法中枚舉規則的一種方法。 IspRecoGrammar :: GetRule()似乎是我能夠查找規則的最接近的東西,但它旨在用於檢索單個已知規則(它需要規則名稱或ID)。

目前我只是簡單地解析XML並拔出規則名稱,但這不是一個完全的解決方案;我需要支持XML 二進制語法配置文件,後者避開了我目前的解決方法。

任何有SAPI經驗的人都知道我會怎樣做到這一點?

+0

你試圖在這裏實現的更高層次的目標是什麼? (AKA - 爲什麼你認爲你需要列舉SAPI規則?) –

+0

感謝您的回覆,Eric。總之,我需要預先驗證其他數據,以反對加載的語法的規則。這些其他數據通過名稱引用規則,因此在加載其他數據時,我想驗證數據引用的語法規則(名稱)實際上是有效的。 – SBD

+0

除了前面提到的XML處理之外,我可以(並且已經)通過簡單地不驗證然後將規則添加到「已知集合」,因爲它們是通過SAPI識別回調遇到的,但這不是一個非常強大的解決方案捕獲數據錯誤。 – SBD

回答

0

看起來好像IspRecoGrammar::GetRule()仍然會做你所需要的。有一套已知的良好規則名稱,當您加載其他數據時,如果規則名稱不在已知好名稱集合中,請使用IspRecoGrammar::GetRule()驗證規則名稱。如果有效,請將其添加到設置中。 (你也可以有一組已知的壞名字。)

+0

好的建議,我從沒有想過從這個方向去看它。這肯定會解決手頭的問題(預先存在的數據驗證)。在向前思考的時候,可能會出現這樣的情況:我們想要提供一個已知規則列表來創作所述引用數據,這將使我們回到規則枚舉的正方形。我認爲,就你所知,沒有辦法列舉規則?我自己相當深的互聯網搜索沒有發現任何東西或任何嘗試類似的東西。 – SBD

+0

@SBD我做了一些檢查,大部分的語法編譯工作都在SAPI接口的引擎端完成;這意味着在語法編譯期間完成的任何規則枚舉都是在內部事務中完成的,並且規則枚舉中沒有任何其他客戶端接口。 –

+0

感謝您的關注。顯然,在這一點上還沒有明確的需要。也許未來的版本將提供設施(這似乎是一件容易揭露的事情)。現在,我將按照建議進行驗證,並在我遇到它時跨過另一座橋。再次感謝。 – SBD