开发者

AVAudioPlayer -> not working

Audio Player works fine if I initiate it for 20 to 30 times but after that it shows the following error

Error Domain=NSOSStatusErrorDomain Code=-43 "The operation couldn’t be completed. (OSStatus error -43.)"

The code currently I am using is as follows

- (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;
    AVAud开发者_StackOverflow中文版ioPlayer *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);
    }


}


I was having the same problem and instead of init the player from url i did it from 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];

It seem to solved my problem hope it does yours.


By calling the method many times you are allocating the instance of AVAudioPlayer newPlayer many times. This will certainly cause you problems because of the memory allocated. Just make sure you release the objects that you own once you are done using them.


Did you set AudioSessionCategory?

{NSError *setCategoryError = nil; 

BOOL success = [[AVAudioSession sharedInstance]  setCategory: avaudiosessioncategoryplayandrecorderror: &setCategoryError];  
}


I was trying to play files in my app by picking them from the iPod library when I got this error code. I found that in my iPod library on the device, I had a duplicate entry for the same song. Music player that comes with iOS was able to play one and not the other. That means one entry was not valid anyway. Probably removed from the device but iTunes/iOS did not do proper housekeeping.

It seems that the reference to the non-playable entry existed within the "Recently Added" playlist which is automatically created by the system. I had picked the same file from "Recently Added" playlist to play in the app.

Side Note: I had removed the file from the manually created playlist in which it existed (removed from the iOS device itself).

In short it seems that the file that I loaded into the AVAudioPlayer instance was not available on the device anymore or its referencing URL did not give back a proper file to play. So common reason for this error would be when the player does not get the file to load based on the URL given to it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜