iOS

2012-02-14 26 views
7

'da arka plan modunda kesintili bir ses girişi kuyruğunu yeniden başlatamıyorum Kayıt için bir AudioQueue kullanarak bir iOS Uygulaması yazıyorum. Doğrusal PCM almak için yapılandırılmış bir giriş kuyruğu oluşturuyorum, bu sıra belirtildi ve her şey beklendiği gibi çalışıyor.iOS

Kesintileri yönetmek için, bir kesintinin başlangıcını ve sonunu yakalamak için AVAudioSession delegesi yöntemlerini uyguladı. yöntem endInterruption aşağıdaki gibi görünür: o ön planda iken uygulama kesilirse

- (void)endInterruptionWithFlags:(NSUInteger)flags; 
{ 
    if (flags == AVAudioSessionInterruptionFlags_ShouldResume && audioQueue != 0) { 

     NSLog(@"Current audio session - category: '%@' mode: '%@'", 
       [[AVAudioSession sharedInstance] category], 
       [[AVAudioSession sharedInstance] mode]); 

     NSError *error = nil; 
     OSStatus errorStatus; 
     if ((errorStatus = AudioSessionSetActive(true)) != noErr) { 
      error = [self errorForAudioSessionServiceWithOSStatus:errorStatus]; 
      NSLog(@"Could not reactivate the audio session: %@", 
        [error localizedDescription]); 
     } else { 
      if ((errorStatus = AudioQueueStart(audioQueue, NULL)) != noErr) { 
       error = [self errorForAudioQueueServiceWithOSStatus:errorStatus]; 
       NSLog(@"Could not restart the audio queue: %@", 
         [error localizedDescription]); 
      } 
     } 
    } 
    // ... 
} 

, her şey doğru çalışır. Kesinti arka planda olursa sorun görünür. ! Hatası kedi ses oturumu sonucu etkinleştirilmesi:

belirtilen ses oturumu kategorisi teşebbüs ses operasyon için kullanılamaz. Örneğin, kAudioSessionCategory_AudioProcessing olarak ayarlanan ses oturumu kategorisiyle ses çalmaya veya kaydetmeye çalıştınız. kategori AVAudioSessionCategoryPlayAndRecord ayarlanmış olduğunu noktada -12985

ve mod AVAudioSessionModeDefault geçerli:

hata kodu oturum sonuçlarını aktive etmeden kuyruğu başlatılıyor.

Bu hata iletisiyle ilgili herhangi bir belge bulamadım veya arka planda bir giriş ses kuyruğu yeniden başlatılabilir.

cevap

0

Şu anda arka planda olmanız durumunda yeniden etkinleştirmenin bir yolu yoktur.

+0

Ben öyle düşündüm. :-( –

0

Uygulama desteği arka planınızı info.plist uygulamasında yaptınız mı? Arka planda kayıt yapmanın mümkün olup olmadığından emin değilim, ancak muhtemelen "Gerekli Arkaplan Modları" nı eklemeniz ve "Uygulama sesleri" nin o dizisindeki bir değer

Güncelleme Sadece kontrol edip kaydetmem gerekiyor arka plan mümkündür.

+0

kayıt eserleri arka planda iyi. Sesli oturum kesintisi arka planda biterse sorun görünür. –

+0

Uzaktan Kumanda Olaylarını kullanmayı denediniz mi? Açıkçası, kullanıcının düğmeye basması gerekecek. ** [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; ** –

+0

Aynı sorunla karşılaşıyorum: Uygulama Arka Plandayken kayıt kesintiye uğradığında, uygulamada herhangi bir zamanda "bitiş kesintisi" bildirimi başlatılmaz. ITalk uygulaması bu tür bir kesintiyi doğru bir şekilde yönetirken, bir çözüm olmalı ... – Denis

7

Evet bu mümkündür, ancak arka planda oturumu yeniden, ses oturumun AudioSessionProperty kAudioSessionProperty_OverrideCategoryMixWithOthers

OSStatus propertySetError = 0; 
    UInt32 allowMixing = true; 



    propertySetError = AudioSessionSetProperty (
               kAudioSessionProperty_OverrideCategoryMixWithOthers, 
               sizeof (allowMixing), 
               &allowMixing 
               ); 

ayarlamak zorundadır veya uygulama vardır receive remote control command events için:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
[self becomeFirstResponder]; 
+0

Teşekkür ederim! Birkaç gün boyunca bunu kovalarım! –