2013-10-04 32 views
14

içinde benim iOS uygulaması arka plan modunda olduğunda iOS 7 AVSpeechSynthesizer işe alınamıyor. Ben uygulamanın desteklenen arka plan modlarına anahtarı "App ses çalış" eklemiş, ama yine de o iş için alınamıyor.AVSpeechSynthesizer arka plan modunda

AVSpeechSynthesizer ifadesiyle bir AVMutableCompositionTrack oluşturma olasılığını araştırdım ve sonra bir şekilde arka planda çalışabilecek bir oyuncu ile oynayabileceğimizi - ancak şanssız bir şekilde araştırdım.

kimse arka planda AVSpeechSynthesizer kullanarak bana daha şanslı mı?

cevap

32
  1. arka plan modlarında "Ses ve AirPlay" ayarlamalısınız.
  2. Ses oturumu yapılandırmak zorunda: 3 hızlı İçin
NSError *error = NULL; 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayback error:&error]; 
    if(error) { 
     // Do some error handling 
    } 
    [session setActive:YES error:&error]; 
    if (error) { 
     // Do some error handling 
    } 
+2

AVKit

mevcuttur! şerefe imam! –

+0

Bu, ses arka plan modunda oynamanıza izin veriyor mu? –

+1

@ChrisTruman, bunun çalıştığını onaylayabilirim. imihaly, "session setActive" çağrısı uygulamanızın arka planda çalışmaya devam etmesine ve uygulamanızın güç gereksinimlerini artırmasına neden oluyor mu? Bazı testler yapacağım, ama benim tahminim cevabın evet olması, bu yüzden yukarıdaki çağrıları yapmak, sentezlenmiş konuşmanızı oynamak ve daha sonra bitirdiğinizde oturumunuzun aktif durumunu tekrar NO olarak ayarlamak istiyorsunuz. –

6

, ithalat AVKit (veya AVFoundation) daha sonra viewWillAppear için

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

ekleyin(). Bu, sesin dilsiz geçiş durumuna ve ekran kapalı durumdaki arka plana bakmaksızın çalmasına izin verir.

* Düzenleme: AVAudioSession AVFoundation tanımlanan ve AVKit

ile de bulunur * Düzenleme 2: otomatik tamamlama gösteren ekran görüntüsü AVAudioSession Müthiş enter image description here

+0

AVKit besbelli hala – cristallo

+0

AVKit yüksek seviyeli çerçevesidir tabi AVFoundation ile değiştirildi ve arka plan modlarında "Ses ve AirPlay" belirledi, AVFoundation daha ince taneli kontrolü ancak [AVKit] (https için kullanmak çerçevesidir: // geliştiricisi .apple.com/documentation/avkit) hiçbir şekilde [AVFoundation] tarafından değiştirilmemiştir (https://developer.apple.com/documentation/avfoundation). – Chris

+0

AVFoundation'ın bir AVKit yedeği olduğunu söylemiyorum. Sadece [AVAudioSession] 'ın (https://developer.apple.com/documentation/avfoundation/avaudiosession) AVKit'e değil AVFoundation'a dahil olduğunu söylüyorum. Bu bağlamda AVFoundation'ı eklemelisiniz. – cristallo