2016-06-03 4 views
0

Я хочу играть песню, используя AVAudioPlayer. Но это не работает некоторое время. Я не понял, в чем проблема. Я использую этот ниже код для воспроизведения mp3-файла из локального.Не воспроизводит mp3-файл, используя AVAudioPlayer

NSString *soundFile; 
soundFile = [[NSBundle mainBundle] pathForResource:@"notification_sound" ofType:@"mp3"]; 
NSURL *fileURL = [NSURL fileURLWithPath:soundFile]; 
NSError *error=nil; 
self.playerAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; 
[[AVAudioSession sharedInstance] setActive: YES error: &error]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
[self.playerAudio setDelegate:self]; 
NSLog(@"Error:%@",error); 
self.playerAudio.numberOfLoops = -1; 
self.playerAudio.volume=1; 
if([self.playerAudio prepareToPlay]) 
{ 
    NSLog(@"Prepare to play successfully"); 
    [self.playerAudio play]; 
} 

if([self.playerAudio prepareToPlay]) это условие не будет удовлетворено, почему это произошло, пожалуйста, помогите мне решить этот вопрос.

Я получил эту ошибку ниже: Error:Error Domain=NSOSStatusErrorDomain Code=560557684 "The operation couldn’t be completed. (OSStatus error 560557684.)" Заранее спасибо

+1

Попробуйте использовать все эти 'параметров error' вас устанавливая значение «nil» и проверяя соответствующие возвращаемые значения этих методов. – rmaddy

+0

Зачем вам нужно проверить [self.playerAudio prepareToPlay]? Не можете ли вы удалить это условие? – Gati

+0

Можете ли вы попробовать добавить 'NSError * activationError = nil;' to' self.playerAudio = [[AVAudioPlayer alloc] initWithContentsOfURL: fileURL error: & activationError]; 'и' [[AVAudioSession sharedInstance] setActive: YES error: & activationError]; 'check Ошибка ? –

ответ

1

Это решение, и это работает отлично :)

NSError *error=nil,*sessionError = nil; 
    NSString * soundFile = [[NSBundle mainBundle] pathForResource:@"notification_sound" ofType:@"mp3"]; 
    NSURL *fileURL = [NSURL fileURLWithPath:soundFile]; 

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback 
            withOptions:AVAudioSessionCategoryOptionMixWithOthers | AVAudioSessionCategoryOptionDuckOthers 
              error:&sessionError]; 
    if (sessionError) { 
     NSLog(@"ERROR: setCategory %@", [sessionError localizedDescription]); 
    } 
    [[AVAudioSession sharedInstance] setActive: YES error: &error]; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

    self.playerAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 

    [[AVAudioSession sharedInstance] setActive: YES error: &error]; 
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 

    [self.playerAudio setDelegate:self]; 
    self.playerAudio.numberOfLoops = -1; 
    self.playerAudio.volume=1; 
    if([self.playerAudio prepareToPlay]) 
    { 
     [self.playerAudio play]; 
    } 
+0

отличная отличная работа: P –

+0

@NitinGohel: Все кредиты идут на u :) –

+0

Ни одна ваша проверка ошибок не верна. Например, это должно быть: 'if (! [[AVAudioSession sharedInstance] setActive: YES error: & error]) {NSLog (@" Невозможно установить активную:% @ ", ошибка);'. Никогда не проверяйте, установлена ​​ли ошибка или нет. Посмотрите на возвращаемое значение метода, чтобы определить, удалось ли это или не удалось. Затем запишите ошибку, если она не удалась. – rmaddy