#import "ViewController.h"
//引入头文件
#import <AudioToolbox/AudioToolbox.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
#pragma mark - 播放音乐
- (IBAction)playAction:(id)sender {
//得到的主要应用程序包
CFBundleRef mainBundle;
SystemSoundID soundFileObject;
mainBundle = CFBundleGetMainBundle ();
//声音文件的URL
CFURLRef soundFileURLRef = CFBundleCopyResourceURL (mainBundle,CFSTR ("蔡琴 - 爱断情伤"),CFSTR ("wav"),NULL);
//注册声音到系统
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject);
// AudioServicesAddSystemSoundCompletion 方法为音频播放添加 CallBack 函数,有了 CallBack 函数我们可以解决不少问题,比如可以克服 System Sound Services 本身不支持循环播放的问题。
AudioServicesAddSystemSoundCompletion (soundFileObject, NULL , NULL ,&completionCallback,(__bridge void *) self );
//播放注册的声音,(此句代码,可以在本类中的任意位置调用,不限于本方法中)
AudioServicesPlaySystemSound(soundFileObject);
//让手机震动
// AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
static void completionCallback (SystemSoundID ssID, void* clientData) {
// Play again after sound play completion
NSLog(@"播放完成-传入ID为-%u,传入的参数为%@", (unsigned int)ssID, clientData);
AudioServicesPlaySystemSound(ssID);
}
void playFinished(SystemSoundID ssID, void* clientData)
{
// unsigned long ID = ssID; // ssID 不能直接作为参数打印出来,需要中转一次
NSLog(@"播放完成-传入ID为-%u,传入的参数为%@", (unsigned int)ssID, clientData);
AudioServicesPlaySystemSound(ssID);
// 移除完成后执行的函数
// AudioServicesRemoveSystemSoundCompletion(ssID);
// 根据ID释放自定义系统声音
// AudioServicesDisposeSystemSoundID(ssID);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end