0

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

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

不幸的是,我自己没有用于测试的 iphone 4S,所以很难知道这个特定设备有什么问题。

会不会是 iPhone 声音设置的问题?

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

这是正确的吗 ?

在.h ...:

@private AVAudioPlayer* myPlayer; 

在他们中 ...:

-(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; 
}

任何意见,将不胜感激 !

4

1 回答 1

0

你的代码真的很奇怪:

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

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

你检查它是否nil仍然正确。

if (myPlayer == nil) 

但是随后你调用release了一个 nil 对象,因为该对象是 nil,所以它什么也不做:

{[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];
于 2012-10-12T09:24:51.030 回答