声音没有播放xcode?

时间:2012-01-06 05:07:34

标签: objective-c

我正试图在我正在使用的按钮上播放声音:

-(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;

我忘记了什么吗?

2 个答案:

答案 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);