Ваш код не работает, потому что вы распоряжаетесь своими ресурсами до того, как закончите с ними.
AudioServicesDisposeSystemSoundID(soundID);
Не следует вызывать во время воспроизведения звука. Вам нужно реорганизовать свой код.
Вам также следует избегать классов CF
, если классы более высокого уровня NS
могут выполнять эту работу. И в этом случае они могут. Вот как это сделать:
Код в ответ на комментарий:
SoundExampleViewController.h:
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
@interface SoundExampleViewController : UIViewController{
SystemSoundID bear3SoundID;
}
-(IBAction)playSoundButtonPushed:(id)sender;
@end
SoundExampleViewController.m:
#import "SoundExampleViewController.h"
@implementation SoundExampleViewController
-(IBAction)playSoundButtonPushed:(id)sender{
AudioServicesPlaySystemSound(bear3SoundID);
}
- (void)viewDidLoad{
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"Bear3" ofType:@"wav"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path],&bear3SoundID);
}
- (void)viewDidUnload{
[super viewDidUnload];
AudioServicesDisposeSystemSoundID(bear3SoundID);
}
@end
Даже если вы придерживаетесь классов CF
в методе viewDidLoad
, вы должны следовать этой общей схеме.