2016-05-18 2 views
0

J'essaie d'implémenter la reconnaissance vocale dans une application iOS Swift. Lorsque l'utilisateur appuie sur un bouton «micro», j'essaie de jouer un son système, puis utiliser SpeechKit pour faire de la reconnaissance vocale. La reconnaissance vocale fonctionne bien, et le son fonctionne bien, si je commente le code SpeechKit. Cependant, quand je les rassemble, je n'ai pas de son. De plus, je n'obtiens pas le son à la fin, une fois la reconnaissance vocale terminée.Essayer de lire le son du système avant la reconnaissance vocale avec SpeechKit

Voici le code:

@IBAction func listenButtonTapped(sender: UIBarButtonItem) { 
    let systemSoundID: SystemSoundID = 1113 
    AudioServicesPlaySystemSound (systemSoundID) 

    let session = SKSession(URL: NSURL(string: "nmsps://{my Nuance key}@sslsandbox.nmdp.nuancemobility.net:443"), appToken: "{my Nuance token}") 

    session.recognizeWithType(SKTransactionSpeechTypeDictation, 
          detection: .Long, 
          language: "eng-USA", 
          delegate: self) 
} 

func transaction(transaction: SKTransaction!, didReceiveRecognition recognition: SKRecognition!) { 
    var speechString = recognition.text 
    print(speechString!) 

    let systemSoundID: SystemSoundID = 1114 
    AudioServicesPlaySystemSound (systemSoundID) 
} 

Quoi qu'il en soit, la reconnaissance vocale fonctionne toujours bien. Si je commente cela, alors le son du système joue bien.

par exemple. le suivant jouera le son bien chaque fois que j'appuie sur le bouton:

@IBAction func listenButtonTapped(sender: UIBarButtonItem) { 
    let systemSoundID: SystemSoundID = 1113 
    AudioServicesPlaySystemSound (systemSoundID) 
} 

J'ai essayé différentes files d'attente sans succès. Je pense que je dois déplacer le code SpeechKit vers un rappel ou une fermeture d'un certain type, mais je ne suis pas sûr de la façon de le construire.

+0

double possible de (http://stackoverflow.com/questions/14121612/audioservicesplaysystemsound-know-when-sound-stopped) [AudioServicesPlaySystemSound savoir quand son arrêté] Vous pouvez –

+0

utilisez 'AudioServicesAddSystemSoundCompletion' –

Répondre

0

La solution à ce problème est décrit ici https://developer.apple.com/documentation/audiotoolbox/1405202-audioservicesplayalertsound

SpeechKit ajoute l'enregistrement à la catégorie AVSession de sorte que les sons ne sont plus lus. Ce que vous voulez faire est la suivante:

let systemSoundID: SystemSoundID = 1113 

    //Change from record mode to play mode 
    do { 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     try AVAudioSession.sharedInstance().setActive(true) 
    } catch let error as NSError { 
     print("Error \(error)") 
    } 
    AudioServicesPlaySystemSoundWithCompletion(systemSoundID) { 
     //do the recognition 
    }