2016-03-14 5 views
1

Между спецификацией pod и тем, что в данный момент находится на S.O. Мне было трудно понять, как заставить говорить с текстом работать с помощью SpeechKit + CocoaPod + Swift. В конце концов, он начал работать так, чтобы я помог следующей бедной душе, которая приходит искать помощи! :)Как реализовать Nuance Speechkit при использовании CocoaPods в Swift

ответ

2
  1. Сначала установите CocoaPod: https://cocoapods.org/pods/SpeechKit
  2. Добавить #import <SpeechKit/SpeechKit.h> в свой мостиковом заголовок
  3. Вход Dev портал Nuance и создать приложение: https://developer.nuance.com/
  4. зачистить демо-код, так что это больше организовано. Я просто хотел, чтобы код был как можно ближе к одному, чтобы вы могли видеть полностью работоспособную реализацию.

Затем создайте UIViewController и добавьте следующий код с правильными учетными данными:

import UIKit 
import SpeechKit 

class SpeechKitDemo: UIViewController, SKTransactionDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

//!!link this to a corresponding button on the UIViewController in I.B. 
@IBAction func tappedButton(sender: AnyObject) { 

    // All fields are required. 
    // Your credentials can be found in your Nuance Developers portal, under "Manage My Apps". 
    let SKSAppKey = "[Get this from the nuance app info page]"; 
    let SKSAppId = "[Get this from the nuance app info page]"; 
    let SKSServerHost = "[Get this from the nuance app info page]"; 
    let SKSServerPort = "[Get this from the nuance app info page]"; 

    let SKSLanguage = "eng-USA"; 

    let SKSServerUrl = "nmsps://\(SKSAppId)@\(SKSServerHost):\(SKSServerPort)" 

    let session = SKSession(URL: NSURL(string: SKSServerUrl), appToken: SKSAppKey) 


    //this starts a transaction that listens for voice input 
    let transaction = session.recognizeWithType(SKTransactionSpeechTypeDictation, 
     detection: .Short, 
     language: SKSLanguage, 
     delegate: self) 
    print(transaction) 
} 

//required delegate methods 
func transactionDidBeginRecording(transaction: SKTransaction!) { } 
func transactionDidFinishRecording(transaction: SKTransaction!) { } 
func transaction(transaction: SKTransaction!, didReceiveRecognition recognition: SKRecognition!) { 

    //Take the best result 
    let topRecognitionText = recognition.text; 

    print("Best rec test: \(topRecognitionText)") 
    //Or iterate through the NBest list 
    let nBest = recognition.details; 
    for phrase in (nBest as! [SKRecognizedPhrase]!) { 
     let text = phrase.text; 
     let confidence = phrase.confidence; 
     print("\(confidence): \(text)") 
    } 



} 
func transaction(transaction: SKTransaction!, didReceiveServiceResponse response: [NSObject : AnyObject]!) { } 
func transaction(transaction: SKTransaction!, didFinishWithSuggestion suggestion: String!) { } 
func transaction(transaction: SKTransaction!, didFailWithError error: NSError!, suggestion: String!) { } 



} 
+0

Я знаю, получить проблему в отладчике, который мешает мне делать осмотр: ошибка: включать в безмодульном заголовке внутри фрейм-модуля «SpeechKit» – Sean

+0

Когда я реализую это с моими учетными данными из песочницы (ключ приложения, идентификатор приложения, хост, порт), я продолжаю получать следующую ошибку при выполнении кода: «Код ошибки рекордера: 1 Сообщение: не удалось открыть поток Внутренняя ошибка -50. " Вы знаете, что может быть причиной этого? – amurray4