2012-02-14 22 views
7

Tôi đang viết Ứng dụng iOS bằng cách sử dụng AudioQueue để ghi. Tôi tạo một hàng đợi đầu vào được cấu hình để lấy PCM tuyến tính, đã nêu hàng đợi này và mọi thứ hoạt động như mong đợi.Không thể khởi động lại hàng đợi đầu vào âm thanh bị gián đoạn ở chế độ nền trên iOS

Để quản lý gián đoạn, tôi đã triển khai phương thức ủy quyền của AVAudioSession để bắt đầu và kết thúc gián đoạn. Phương thức endInterruption trông giống như sau:

- (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]); 
      } 
     } 
    } 
    // ... 
} 

Nếu ứng dụng bị gián đoạn trong khi ở mặt trước, mọi thứ hoạt động chính xác. Vấn đề xuất hiện, nếu sự gián đoạn xảy ra ở chế độ nền. Kích hoạt kết quả phiên âm thanh trong các lỗi mèo:

Các quy định âm thanh loại phiên không thể được sử dụng cho các hoạt động âm thanh đã cố gắng. Ví dụ: bạn đã cố phát hoặc ghi âm với danh mục phiên âm thanh được đặt thành kAudioSessionCategory_AudioProcessing.

Bắt đầu từ hàng đợi mà không kích hoạt các kết quả phiên mã lỗi: -12985

Tại điểm đó hạng mục được thiết lập để AVAudioSessionCategoryPlayAndRecord và chế độ là AVAudioSessionModeDefault.

Tôi không thể tìm thấy bất kỳ tài liệu nào cho thông báo lỗi này, cũng như không thể khởi động lại hàng đợi âm thanh đầu vào trong nền.

Trả lời

0

Hiện tại không có cách nào để kích hoạt lại nếu bạn ở chế độ nền.

+0

Tôi nghĩ vậy. :-( –

0

Bạn đã đặt nền tảng hỗ trợ ứng dụng của mình trong info.plist chưa? Tôi không chắc liệu ghi âm có thể ở chế độ nền hay không, nhưng có thể bạn cần thêm "Chế độ nền bắt buộc" và sau đó một giá trị trong chuỗi "Ứng dụng phát âm thanh"

Cập nhật Tôi vừa kiểm tra và ghi nền là có thể.

+0

Các công trình ghi âm tốt trong nền. Sự cố xuất hiện, nếu gián đoạn phiên âm thanh kết thúc ở chế độ nền. –

+0

Bạn đã thử sử dụng Sự kiện điều khiển từ xa chưa? Rõ ràng người dùng sẽ phải nhấn nút. ** [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; ** –

+0

Tôi gặp phải sự cố tương tự: khi ghi bị gián đoạn trong khi ứng dụng ở chế độ nền, không có thông báo "gián đoạn kết thúc" nào được kích hoạt bất cứ lúc nào trong ứng dụng. Do ứng dụng iTalk quản lý chính xác loại gián đoạn đó, nên có giải pháp ... – Denis

7

Có nó là có thể, nhưng để kích hoạt lại phiên làm việc trong nền, phiên âm thanh có một trong hai thiết AudioSessionProperty kAudioSessionProperty_OverrideCategoryMixWithOthers

OSStatus propertySetError = 0; 
    UInt32 allowMixing = true; 



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

hoặc ứng dụng phải receive remote control command events:

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

Cảm ơn bạn! Tôi đã theo đuổi điều này trong vài ngày! Tôi sẽ +10 nếu tôi có thể :-) –