音频播放器工作正常,如果我启动它20至30次,但之后它显示以下错误
错误域= NSOSStatusErrorDomain代码= -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);
}
}
答案 0 :(得分:1)
我遇到了同样的问题而不是从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];
它似乎解决了我的问题,希望它能成为你的。
答案 1 :(得分:0)
通过多次调用该方法,您多次分配AVAudioPlayer
newPlayer
的实例。由于分配了内存,这肯定会导致问题。完成使用后,请确保release
您拥有的对象。
答案 2 :(得分:0)
您是否设置了AudioSessionCategory?
{NSError *setCategoryError = nil;
BOOL success = [[AVAudioSession sharedInstance] setCategory: avaudiosessioncategoryplayandrecorderror: &setCategoryError];
}
答案 3 :(得分:0)
当我收到此错误代码时,我试图通过从iPod库中选择文件来播放我的应用程序中的文件。我发现在我设备上的iPod库中,我有同一首歌的重复条目。 iOS附带的音乐播放器能够播放一个而不是另一个。这意味着一个条目无论如何都无效。可能已从设备中删除,但iTunes / iOS没有正确管理。
似乎对不可播放条目的引用存在于"最近添加"播放列表由系统自动创建。我从"最近添加"中选择了相同的文件。播放列表可在应用中播放。
备注:我已从手动创建的播放列表中删除了该文件(已从iOS设备中删除)。
简而言之,我加载到AVAudioPlayer实例的文件似乎不再可用于设备,或者它的引用URL没有返回正确的文件。这种错误的常见原因是当播放器没有根据给定的URL加载文件时。