AVAudioPlayer仅在iPhone 4S上播放声音

时间:2012-10-12 09:10:10

标签: iphone ios avaudioplayer audio

我有一个应用程序在商店一年,很少有人拥有iPhone 4S告诉我声音没有在他们的设备上播放。 (他们听不到任何声音,无论是耳机还是内置扬声器)

我仍然在真实设备(iPhone 3G,3GS,4,ipod 1G,2G,3G,4G,ipad 1,2,3)上进行了测试,一切看似正确。声音正在播放。 (在各种OS上测试:iOS 3.1.2 - > 6.0,它也适用于模拟器)

不幸的是我没有iphone 4S进行测试,因此很难知道这个特定设备出了什么问题。

iPhone声音设置可能有问题吗?

但也许这与我的代码有关? 所以,这是我用来播放声音的代码。

这是对的吗?

在.h ......:

@private AVAudioPlayer* myPlayer; 
在.m ...中

-(IBAction)playMySound{
playerPlay = YES; // it's a bool variable used at an other place in the code
NSString *path;
if((path = [[NSBundle mainBundle]  
       pathForResource:[NSString stringWithFormat:@"%d", idsound ] 
       ofType:@"m4a" 
       inDirectory:@"sounds"]))
    {
    NSURL *url = [NSURL fileURLWithPath:path];
    NSError *error;
    myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    if (myPlayer == nil) {[myPlayer release]; return;}
    myPlayer.delegate = self;
    [myPlayer play];
    }
else return; 
}

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

你的代码真的很奇怪:

在这里你正确地创建了播放器:

myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];

您检查是否nil,仍然正确。

if (myPlayer == nil) 

但是你在一个零对象上调用release,因为对象是零,所以什么都不做:

{[myPlayer release]; return;}

这应该会更好一点:

NSError *error = nil;
myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if (myPlayer == nil) {
   NSLog(@"Error creating AVAudioPlayer: %@", error); 
   return;
}
myPlayer.delegate = self;
[myPlayer prepareToPlay];
[myPlayer play];