Как определить конец речи с помощью Nuance Vocalizer, Speechkit 2, для iOS

Я использую Speechkit 2 Nuance с Swift, iOS 9.3. Необходимо определить, когда заканчивается TTS, согласно этой документации:

https://developer.nuance.com/public/Help/DragonMobileSDKReference_iOS/Speech-synthesis.html

... Это три метода делегата, доступные для TTS:

// SKTransactionDelegate
func transaction(transaction: SKTransaction!, didReceiveAudio audio: SKAudio!) { ... }
func transaction(transaction: SKTransaction!, didFinishWithSuggestion suggestion: String!) { ... }
func transaction(transaction: SKTransaction!, didFailWithError error: NSError!, suggestion: String!) { ... }

Кроме того, вот пример проекта Swift ( https://developer.nuance.com/public/index.php?task=prodDev), где в примере TTS используется дополнительный SKAudioPlayerDelegate, и в коде, который я видел, этот метод делегата, однако это НИКОГДА не вызывает:

func audioPlayer(player: SKAudioPlayer!, willBeginPlaying audio: SKAudio!) {
        log("willBeginPlaying")
        // The TTS Audio will begin playing.
    }

Я звоню в TTS с:

var skTransaction = skSession!.speakString("a long sentence here",withLanguage: "eng-USA",delegate: self)

Однако "didFinishWithSuggestion" всегда срабатывает задолго до того, как голос TTS закончил говорить, что для меня кажется ошибкой. Техническая поддержка Nuance не ответит, кто-нибудь может мне помочь? Благодарю.

1 ответ

Решение

Я нашел решение. Оказывается, что второй делегат отвечает за определение начала и конца воспроизведения TTS:

class ViewController: UIViewController, SKAudioPlayerDelegate{
    //All your view controller code here...

    func viewDidLoad(){
       //more init. code 
       skSession!.audioPlayer.delegate=self
   }
}

Это методы делегата:

func audioPlayer(player: SKAudioPlayer!, willBeginPlaying audio: SKAudio!){
  print("Starting TTS")
}
func audioPlayer(player: SKAudioPlayer!, didFinishPlaying audio: SKAudio!) {
   print("TTS FINISHED")
}
Другие вопросы по тегам