【发布时间】:2010-06-16 15:12:45
【问题描述】:
我有一个应用程序即将完成,但遇到了一个烦人的问题。在应用程序中,我想在点击某个对象时播放声音,然后该对象消失。这是我使用的一段代码:
在 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 输入的声音。不确定这是否会影响音频输出。
【问题讨论】:
-
检查您的声音文件是否命名为“Sound.caf”而不是“sound.caf” - iPhone 上的文件系统区分大小写,而在 MacOS 中则不 - 它通常会导致此类问题。
-
感谢您的建议弗拉基米尔。检查文件名是否正确。
-
一个简单的检查是注释掉
[self removeFromSuperview];只是为了看看声音是否会在不添加从视图中删除按钮的情况下自行播放。有时更容易“分块”调试以找出导致问题的部分。如果声音播放正常,那么您就知道是删除部分导致了错误。我不知道为什么,但是从视图中删除它可能会取消操作,因此您可能必须先延迟删除或隐藏它,然后在音频完成后,您可以删除隐藏的对象。 -
谢谢罗伯。刚刚尝试注释掉 removeFromSuperview 行,但声音仍然没有播放。无论如何感谢您的建议。
标签: iphone audio ios-simulator