我正试图在我正在使用的按钮上播放声音:
-(IBAction)sound {
NSString *path = [[NSBundle mainBundle] pathForResource:@"Beat" ofType:@"wav"];
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
theAudio.delegate = self;
[theAudio play];
}
和
#import <AVFoundation/AVAudioPlayer.h>
.h文件;
- (IBAction) sound;
我忘记了什么吗?
答案 0 :(得分:2)
之前我遇到过这个问题,由于ARC的新方式,它出人意料地具有欺骗性。
您已在方法“声音”中创建了音频。但是,此对象的生命周期只持续到方法退出。因此,ARC甚至在有机会播放声音之前就会摧毁音频。
有趣的是,如果你在预ARC中这样做,你会发现你的声音播放,但你有内存泄漏,因为音频没有被释放。或者你可以在回调发生时释放它,但这种违反了一些内存管理原则,所以我不会支持它。
您需要使用某种“混音器”类来处理/保留音频播放器组。
答案 1 :(得分:1)
尝试此操作并确保在.h文件中导入音频工具箱
CFBundleRef mainBundle = CFBundleGetMainBundle();
CFURLRef soundFileURLRef;
soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"H1", CFSTR("WAV"), NULL);
if (soundFileURLRef){
CFStringRef url = CFURLGetString(soundFileURLRef);
}
UInt32 soundID;
AudioServicesCreateSystemSoundID)soundFileURLRef, &soundID);
AudioServicesPlaySystemSound(soundIB);