2010-06-16 97 views
2

我有一个即将完成的应用程序,但遇到了一个烦人的问题。在应用程序中,当我点击某个对象时,我想播放声音,然后对象消失。这是一段代码我使用:音频在iPhone模拟器中播放良好,但在iPhone中不能播放

在Object.h

#import <UIKit/UIKit.h> 
#import <AudioToolbox/AudioServices.h> 

@interface Object: UIView { 
    UIImageView *image; 
    CGPoint location; 
    SystemSoundID soundFileID; 
} 

在Object.m

- (void)initWithSound { 
    //a bunch of code to define the image and location 
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Sound" ofType:@"caf"]; 
    CFURLRef soundURL = (CFURLRef)[NSURL fileURLWithPath:soundPath]; 
    AudioServicesCreateSystemSoundID(soundURL, &soundFileID); 
    return self; 
} 

然后在我的mainViewController,几个对象将根据用户的动作来创建并添加以不同图像在不同位置的屏幕。在敲击物体本身时,它会产生声音并消失。

在Object.m

- (void)tapped { 
    AudioServicesPlaySystemSound(soundFileID); 
    image.image = nil; 
    [self removeFromSuperview]; 
} 

一切工作发现在模拟器。但是当我在iPhone上尝试时,该物体按照预期敲击时消失,但声音不起作用。尝试在3G和3GS上,都不会播放声音。我认为这应该工作。我犯了什么错误吗?谢谢你的帮助。

编辑:只是想到了一些我不知道相关与否。我还使用麦克风来检测AVAudioRecorder从用户输入的声音。不确定这是否会影响音频输出。

+1

检查,如果你的声音文件被命名为“Sound.caf”,而不是“的声音.caf“ - iPhone上的文件系统区分大小写,而在MacOS中则不是 - 它通常会导致此类问题。 – Vladimir 2010-06-16 15:19:35

+0

感谢您的建议弗拉基米尔。检查文件名是否正确。 – Anthony 2010-06-16 15:32:02

+0

要检查一个简单的事情就是注释'[self removeFromSuperview];'只是为了查看声音是否会自行播放,而不添加从视图中删除按钮。有时更容易“调整”调试以找出哪个部分导致问题。如果声音播放正常,那么您知道这是导致错误的移除部分。我不知道为什么,但从视图中删除它可能会取消该操作,因此您可能必须首先延迟删除或隐藏它,并在音频完成后删除隐藏的对象。 – iwasrobbed 2010-06-16 16:17:01

回答

2

终于找到问题所在!我不得不建立一个音频会话。就是这样!显然我需要更多的关于音频和视频的研究。

只是有人谁可能会遇到同样的情况我,这里是我在viewDidLoad方法中添加的代码:

AVAudioSession * audioSession = [AVAudioSession sharedInstance]; 

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error]; 

[audioSession setActive:YES error: &error]; 
+0

您是否包含AudioToolbox以外的任何其他框架? – 2011-04-30 07:54:56

+0

我还添加了AVFoundation和CoreAudio。 – Anthony 2011-05-17 17:17:14

+0

谢谢! AVAudioSession位于AVFoundation框架中,因此请确保将其包含在您的构建中。 – deepwinter 2013-02-01 06:46:21

相关问题