2012-08-31 1 views
3

다른 앱이 배경에서 오디오를 재생할 수있는 iPhone 응용 프로그램을 개발했습니다. 이를 위해,이처럼 내 오디오 세션을 초기화 : 내 응용 프로그램의 어느 시점에서AVAudioPlayer가 일시 중지 된 후 백그라운드 오디오 다시 시작

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

내가 AVAudioPlayer와 CoreData에 저장된 일부 파일을 재생하는 오디오 플레이어를 제공합니다. 사용자가 재생 버튼을 누르면 배경 오디오가 일시 중지되어야합니다. 플레이어가 끝났거나 일시 중지되면 배경 오디오가 재생을 다시 시작해야합니다. 플레이어가 마법처럼

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
    [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil]; 
} 

작품 재생 완료 후

것은 다시 시작하는 동안, 나는 일시 정지 후 이력서와 박히. 이 버튼의 IBAction를

-(IBAction)pausePlayer 
{ 
    if (self.player.isPlaying) { 
     [self.player pause]; 
     [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil]; 
    } 
} 

내에서 동일한 방식으로 작동해야하지만 난 항상 같은 오류가 발생합니다 :

Unable to deactivate audio session. Error: Error Domain=NSOSStatusErrorDomain Code=560030580 "The operation couldn’t be completed. (OSStatus error 560030580.)" 

가이 경우에 AudioSession을 비활성화하는 것은 불가능 왜 어떤 제안?

+0

오디오 프레임 오프셋을 -1로 설정하거나 플레이어의 인스턴스를 완전히 중지하려고 시도 했습니까? – dklt

+2

560030580은 16 진수로 변환되어 ASCII로 해석됩니다. 'AudioSession.h'에서 이것을 보면, 그 에러는'kAudioSessionNotActiveError'입니다. –

+0

@SteveMadsen 당신은 놀라운 16 진수 속살 거리는 사람입니다. – Warpling

답변

1

비활성화가 너무 이른 것으로 보입니다. AVAudioSession 클래스 참조에 따르면 "연결된 오디오 객체 (예 : 대기열, 변환기, 플레이어 또는 레코더)가 현재 실행중인 경우 세션 비활성화가 실패합니다."

몇 가지 솔루션이 될 것 같다 :

  1. 실행 성공할 때까지 루프에서 비활성화.

    이것은 정말 필요까지 예컨대, 비활성화를 연기 http://iknowsomething.com/ios-sdk-spritekit-sound/

  2. 에서 주장한다.

  3. Audio Queue 서비스를 사용하는 경우 즉시 중지하는 것이 좋습니다.

    녹음을들을 가능성이있는 녹음 앱에서 시퀀스를 사용하여 카테고리를 변경하기 전에 비활성화하기 만합니다 : NO, setCategory를 활성화하고 YES를 활성화하십시오.

    가이드

2

나는 마침내 여기있어 3 시간 동안 노력 프로그래밍 애플의 오디오 세션에서 "앱이 실행되는 동안, 애플은 사용자가 설정 한 값 중 하나를 변경하기 전에 오디오 세션을 비활성화하는 것이 좋습니다 것은"내가 한 일이다

#import "ViewController.h" 
#import <AVFoundation/AVFoundation.h> 

@interface ViewController() 

    @property(strong, nonatomic)AVAudioPlayer *player; 
    @property(strong)AVAudioSession *session; 
@end 

@implementation ViewController 


- (IBAction)playsound:(id)sender 

{ 

    NSURL *url=[[NSURL alloc]initWithString:[[NSBundle mainBundle]  pathForResource:@"sound" ofType:@"mp3"]]; 
    NSError *err; 

    self.player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&err]; 
    [self.player setDelegate:self]; 
    [self.player setVolume:2.5]; 

    self.session=[AVAudioSession sharedInstance]; 

    [self.player prepareToPlay]; 
    [self.player play]; 

} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 

{ 

    NSError *err; 
    [self.session setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&err]; 



} 


@end 
+0

구현 한 것은 이미 저에게 효과가있는 경우입니다. 플레이어를 일시 중지하고 세션을 비활성화하여 백그라운드 재생을 다시 시작하십시오. 이것은 나를 위해 작동하지 않는 것입니다. – DEAD10CC