AVAudioPlayer -> не работает - PullRequest
       0

AVAudioPlayer -> не работает

0 голосов
/ 17 марта 2011

Audio Player работает нормально, если я запускаю его от 20 до 30 раз, но после этого он показывает следующую ошибку

Error Domain = NSOSStatusErrorDomain Code = -43 "Операция не может быть завершена. (Ошибка OSStatus-43.) "

Код, который я сейчас использую, выглядит следующим образом

- (void)playShortSound:(NSString *)fileName type:(NSString *)type
{
    if (!isSound) {
        return;
    }
    NSString *soundFilePath =[[NSBundle mainBundle] pathForResource: fileName ofType: type];
    NSURL *fileURL = [[[NSURL alloc] initFileURLWithPath: soundFilePath] autorelease];


    NSError *error;
    AVAudioPlayer *newPlayer =[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                           error: &error];


    //newPlayer.numberOfLoops = 0;
    newPlayer.volume=1.0;
    if (newPlayer == nil){
        NSLog(@"%@",[error description]);
        //[self playShortSound:fileName type:type];
        //return;
    }
    else{
        [newPlayer play];
    newPlayer.delegate=self;
    }
}
- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) player

                        successfully: (BOOL) completed {

    if (completed == YES) {

        NSLog(@"Sound Playing complete");

    }else {
        NSLog(@"error in completion of %@",player.url);
    }


}

Ответы [ 4 ]

1 голос
/ 16 февраля 2013

У меня возникла та же проблема, и вместо инициализации проигрывателя из URL я сделал это из NSData.

NSString *soundFilePath =[[NSBundle mainBundle] pathForResource: fileName ofType: type];
NSData *soundData = [[NSData alloc] initWithContentsOfFile:soundFilePath];


NSError *error;
AVAudioPlayer *newPlayer =[[AVAudioPlayer alloc] initWithData: soundData
                                       error: &error];

Кажется, это решило мою проблему, надеюсь, что это ваша.

0 голосов
/ 09 декабря 2014

Я пытался воспроизвести файлы в своем приложении, выбирая их из библиотеки iPod, когда получил этот код ошибки. Я обнаружил, что в моей библиотеке iPod на устройстве у меня есть дубликат записи для той же песни. Музыкальный проигрыватель, который поставляется с iOS, мог воспроизводить один, а не другой. Это означает, что одна запись была недействительной в любом случае. Возможно, он был удален с устройства, но iTunes / iOS не выполняла надлежащую уборку.

Похоже, что ссылка на не воспроизводимую запись существовала в плейлисте «Недавно добавленные», который автоматически создается системой. Я выбрал тот же файл из списка недавно добавленных для воспроизведения в приложении.

Примечание. Я удалил файл из списка воспроизведения, созданного вручную, в котором он существовал (удален с самого устройства iOS).

Короче говоря, кажется, что файл, который я загрузил в экземпляр AVAudioPlayer, больше не был доступен на устройстве, или его ссылочный URL не вернул нужный файл для воспроизведения. Поэтому распространенной причиной этой ошибки может быть то, что проигрыватель не получает файл для загрузки на основании заданного ему URL-адреса.

0 голосов
/ 29 июля 2013

Вы установили AudioSessionCategory?

{NSError *setCategoryError = nil; 

BOOL success = [[AVAudioSession sharedInstance]  setCategory: avaudiosessioncategoryplayandrecorderror: &setCategoryError];  
}
0 голосов
/ 17 марта 2011

Вызывая метод много раз, вы выделяете экземпляр AVAudioPlayer newPlayer много раз. Это, безусловно, вызовет проблемы из-за выделенной памяти. Просто убедитесь, что вы release объекты, которыми вы владеете, как только вы закончите, используя их.

...