2012-10-12 98 views
0

自从一年以来,我在商店中有一个应用程序,拥有iPhone 4S的少数人告诉我声音不能在他们的设备上播放。 (他们没有听到任何东西,无论是带耳机还是内置扬声器)AVAudioPlayer不能在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; 
在.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; 
} 

任何意见,将不胜感激!

回答

0

你的代码是很奇怪:

在这里你正确地创建播放器:你检查它是否是nil,还是正确的

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

的。

if (myPlayer == nil) 

但你打电话release 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]; 
+0

你好,谢谢你的建议!请原谅我在复制代码时犯的小错误:当然,正确的代码是“myPlayer.delegate = self”,而不是“myPlayer = self”!我会尝试与您的其他建议。 – Chrysotribax

+0

'prepareToPlay'可能会诀窍。我在我的两个应用程序中使用过这样的代码,我使用的是iPhone 4S,没有任何问题。 – rckoenes

+0

非常感谢您的建议:我在代码中添加了“preparetoplay”,并且工作正常。另外,我改变了“[myPlayer发布];返回;”与您的代码。当然更好! – Chrysotribax