2012-10-06 27 views
1

我使用Nuance的SpeechKit(特別是SKRecognizer類)來檢測用戶點擊按鈕時的語音。但是,如果他們在預先確定的時間內(3秒左右)不說話,我想取消錄音。在init函數中傳遞「SKShortEndOfSpeechDetection」似乎沒有辦法,它只會在用戶已經說出某些內容時停止錄製。有沒有其他的方法來完成這個?在SKRecognizer中檢測不到語音

回答

3

我已經使用了Nuance的SpeechKit前,不幸的是它缺少一些東西,我記得他們的這是一個。

你可以嘗試使用完全免費,開源的語音框架爲iOS稱爲OpenEars


但是,如果你仍然要去嘗試和使用SpeechKit我可以看到完成你想要什麼的唯一方式是通過監測SKRecognizeraudioLevel財產。根據SpeechKit Docs此屬性描述:

記錄期間最新音頻的平均功率。

我已經檢查過,它不符合KVO標準,所以您不能簡單地添加觀察者來監視它的更改。要監視這個變化,你可以添加一個NSTimer,每隔一段時間檢查一次值。

NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(monitorAudioLevel:) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 

...

-(void)monitorAudioLevel:(NSTimer *)timer { 

    float audioLevel = speechRecognizer.audioLevel; 

    NSLog(@"level: %f", audioLevel); 

    if(audioLevel > THRESHOLD) { 
     //user has spoken 
     [timer invalidate]; 
    } 
    else { 
     //user has not spoken 
    } 
} 

這需要進行一些試驗,以找到一個很好的信用額度是多少。使用這種方法,您只需跟蹤用戶是否說過話,然後使用另一個計時器來查看他們是否在您預先確定的截斷時間之前發言。

0

我有類似的實現bbodayle建議,它的工作。一些好的閾值是0.4,意味着帶有一些遠程背景噪聲的靜音。