2016-05-06 6 views
0

Ich versuche, einen Ton auszulösen, nachdem ich ein Wort sage. Der Spracherkenner erkennt das Wort, wenn ich es sage, und ich habe es so eingerichtet, dass es jedes Mal eine Zeichenfolge ausgibt, wenn ich den Befehl sage. Was ich tun möchte, ist einen Ton auszulösen, nachdem ich dieses bestimmte Wort gesagt habe. Das habe ich bisher.Trigger Sound Play() mit NSSpeechRecognizer Swift

import Cocoa 
import AVFoundation 

class ViewController: NSViewController, NSSpeechRecognizerDelegate { 

var ping = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("ping", ofType: "mp3")!) 
var pingAudioPlayer = AVAudioPlayer() 

var sr = NSSpeechRecognizer() 
@IBOutlet var output: NSTextView? 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
    pingAudioPlayer = AVAudioPlayer(contentsOfURL: ping, error: nil) 

    sr.delegate = self 
    sr.commands = ["Ping", "Ping Mac"] 
    sr.startListening() 

} 

func speechRecognizer(sender: NSSpeechRecognizer, didRecognizeCommand command: AnyObject?) { 
    output!.string! += "\(command)\n" 
    pingAudioPlayer.play() 
} 
override var representedObject: AnyObject? { 
    didSet { 
    // Update the view, if already loaded. 
    } 
} 

UPDATE:

import Cocoa 
import AVFoundation 

class ViewController: NSViewController, NSSpeechRecognizerDelegate { 

var ping = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("ping", ofType: "mp3")!) 
let pingAudioPlayer = AVAudioPlayer() 

var sr = NSSpeechRecognizer() 
@IBOutlet var output: NSTextView? 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
    sr.delegate = self 
    sr.commands = ["Ping", "Ping Mac"] 
    sr.startListening() 


} 

func speechRecognizer(sender: NSSpeechRecognizer, didRecognizeCommand command: AnyObject?) { 
    output!.string! += "\(command)\n" 
    var pingAudioPlayer = AVAudioPlayer(contentsOfURL: ping, error: nil) 
    pingAudioPlayer.prepareToPlay() 
    pingAudioPlayer.play() 
} 
override var representedObject: AnyObject? { 
    didSet { 
    // Update the view, if already loaded. 
    } 
} 

}

nicht sicher, warum die Audio-Player den Ton nicht zu spielen, sobald das Wort erkannt wird. Irgendwelche Ideen?

Antwort

0

Sie sagen dem Audioplayer nicht, welcher Ton zu spielen ist. Versuchen Sie dies:

func speechRecognizer(sender: NSSpeechRecognizer, didRecognizeCommand command: AnyObject?) { 

do{ 
    let pingAudioPlayer = try AVAudioPlayer(contentsOfURL:ping) 
    pingAudioPlayer.prepareToPlay() 
    pingAudioPlayer.play() 
}catch { 
    print("Error getting the audio file") 
} 
} 
+0

Danke Justin. Ich erkannte, dass ich eine ältere Version von Xcode habe und denke, dass Swift seither einige Updates hat. Ich habe es geändert und sage jetzt dem Audioplayer, was zu spielen ist, aber immer noch keinen Ton. Siehe Update – Pjc1992

+0

@Any Idee auf, warum es möglicherweise nicht funktioniert ... – Pjc1992

+0

Meine einzige Erfahrung mit Audio ist mit MPMediaPlayer, so dass ich nicht wirklich sicher bin, was das Problem hier wäre. –