2016-09-06 10 views
0

AVSpeechSynthesizerを押すたびに「Hello World」と表示されるボタンがあると、最初の音声合成文字列が終了するまで音声は再開されません。AVSpeechSynthesizerを再起動する前に終了する必要があります

次の2つのオプションはどのようにして得られますか?私は、ボタンをタップすると

  1. はそれが(つまり、複数の声が一度に話す)

以前のものの上に話してください、それは前の音声文字列を中断して、最初からやり直してください

ここは私が今やっていることです。前のボタンを押して通話が終了するまでこれを利用して、ボタンを、もう一度話して開始されません。

@IBAction func helloButton(sender: AnyObject) {  
    let utterance = AVSpeechUtterance(string: "Hello World") 
    let synthesizer = AVSpeechSynthesizer() 
    synthesizer.speakUtterance(utterance) 
} 
+0

は、あなたが複数の 'AVSpeechSynthesizer'sを作成することにより、0.2を行うことができ、あなたの第二の問題への解決策を認識していませんよ? –

答えて

2

現在の音声を中断し、新しいものを開始するためには、されて、現在あるものを停止する必要があります演奏された。これを行うには、シンセサイザーへの参照を保持し、新しいスピーチを開始するときはstopSpeakingAtBoundaryに電話する必要があります。 .Immediateを停止境界として使用すると、すぐに停止します。 stopSpeakingAtBoundayは現在のAVSpeechSynthesizerキューを完全にクリアすることを覚えておいてください。

let synthesizer = AVSpeechSynthesizer() 
    func helloButton(sender: AnyObject) { 
     synthesizer.stopSpeakingAtBoundary(.Immediate) 
     let utterance = AVSpeechUtterance(string: "Hello World") 
     synthesizer.speakUtterance(utterance) 
    } 

悲しいことに、私は

+0

これはオプション1に最適です。ありがとう!うまくいけば誰かがすぐに#2を持っています。 –

関連する問題