2017-07-26 8 views
4

私はどのようにしてを知りたいのですが、私のiPhoneはバックグラウンドで話していますが、前に再生していたものに戻っている間、私のiPhoneは一文を話せます。f.eを停止することなくバックグラウンドでAVSpeechSynthesizerを使用します。音楽アプリ

私の質問は、私はが再生されている音楽を停止することなく、バックグラウンドにいる間、「何かを言う」ことができるようにしたい差が再びAVSpeechSynthesizer in background modeと非常によく似ていますが。だから私のAVSpeechSynthesizerが話している間、音楽は一時停止する(または少し大きめにする)が、その後は再開する必要があります。私のアプリが現在バックグラウンドになっていても。

私がアーカイブしようとしているのは、フィットネスアプリでGPS追跡中の追跡統計情報の音声要約です。そして、私は答えを見つけた

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
+0

あなたはすでに見てきましたAVAudioSessionCategoryOptionMixWithOthersなどのオプションで – kvr

答えて

1

迅速な3については

2

は、輸入AVKitはその後、自分自身を追加...チャンスはあなたが音楽を聴いていることは、非常に高いことであり、私は、ユーザーを邪魔したくありませんこれは、Feの再生を行います

let audioSession = AVAudioSession.sharedInstance() 
try audioSession.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers) 

.duckOthersオプションでAVAudioSessionを設定するには...

重要な部分イスト音楽はそれほど大きくはないが、これはスピーチが行われても音量を抑えることができる。あなたがAVSpeechSynthesizerの委譲を設定し、そのようにそれを処理する必要がある理由です:スピーチが行われた後

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) { 
    guard !synthesizer.isSpeaking else { return } 

    let audioSession = AVAudioSession.sharedInstance() 
    try? audioSession.setActive(false) 
} 

そのように、音楽は通常のボリュームでまいります。また

、右話す前に、私は念のために私audioSessionをアクティブ(がそれが本当に必要であるかどうかわからないが、私はそうするために、私は...これ以上の問題を持っていない)

+0

あなたはAppDelegateのオーディオセッションを設定する必要があります –

+0

私はすでに解決策を見つけました...カテゴリを設定するだけでなく、オプションを '.duckOthers'に設定する必要があります。次に、AVSpeechSynthesizer'の代理人が必要です。話し終わったらセッションをアクティブにしないでください。 – Georg

+0

AVKitをAVFoundationに置き換え、バックグラウンドモードで "Audio and AirPlay"を設定する必要があります – cristallo

関連する問題