我有一个应用程序即将完成,但遇到了烦人的问题。在应用程序中,我想在点击某个对象时播放声音,然后该对象消失。这是我使用的代码片段:
在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用户输入的声音。不确定这是否会影响音频输出。
答案 0 :(得分:2)
终于找到了问题所在!!
事实证明,我必须设置音频会话。就是这样!显然我需要更多关于音频和视频的研究。
对于可能遇到与我相同情况的人,这是我在viewDidLoad方法中添加的代码:
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: &error];
[audioSession setActive:YES error: &error];