您的位置:首页 - 其他
实现ios提示音播放与震动
在ios开发中,有时候我们需要频繁播放某种提示声音,比如微博刷新提示音、QQ消息提示音等,对于这些短小且需要频繁播放的音频,最好将其加入到系统声音(system sound)里。

注意:

需要播放的音频文件不能超过30秒
必须是IMA/ADPCM格式[in linear PCM or IMA4(IMA/ADPCM) format]
必须是.caf .aif .wav文件



1、自定义系统声音
// 要播放的音频文件地址
NSString *urlPath = [[NSBundle mainBundle] pathForResource:@"end_refreshing" ofType:@"wav"];

NSURL *url = [NSURL fileURLWithPath:urlPath];

// 声明需要播放的音频文件ID[unsigned long]
SystemSoundID ID;

// 创建系统声音,同时返回一个ID
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &ID);


2、根据自定义系统声音时传入的ID,播放自定义系统声音

// 根据ID播放自定义系统声音
AudioServicesPlaySystemSound(ID);


3、经过以上2步就可以进行简单的自定义系统声音并播放了,但是别忘记了,在ARC中,C语言的函数需要是手动管理内存,所以在不需要该声音时,调用方法释放该音频

// 根据ID释放自定义系统声音
AudioServicesDisposeSystemSoundID(ID);


4、有时候我们需要在完成播放的时候做一些事情,比如继续播放下一个音频或者提示用户,需要用到函数[如果需要用到此步骤,需要将该方法写在释放ID(步骤3)之前]

// 播放完成后执行的操作
/*
*参数说明:
* 1、刚刚播放完成自定义系统声音的ID
* 2、回调函数(playFinished)执行的run Loop,NULL表示main run loop
* 3、回调函数执行所在run loop的模式,NULL表示默认的run loop mode
* 4、需要回调的函数
* 5、传入的参数, 此参数会被传入回调函数里
*/
AudioServicesAddSystemSoundCompletion(ID, NULL, NULL, &playFinished, (__bridge void *)(self));
}

@implementation与@interface外部自定义一个函数,然后传入这个函数名的地址


void playFinished(SystemSoundID ssID, void* clientData)
{
unsigned long ID = ssID; // ssID 不能直接作为参数打印出来,需要中转一次

NSLog(@"播放完成-传入ID为-%lu,传入的参数为%@", ID, clientData);
  /*在此处填写你要在播放完成后执行的代码*/
}


这样就可以实现播放完成后调用预先定义好的函数playfinished(),继续做一些你希望的事情,但是别忘了,ARC中C语言函数需要自己管理内存,所以这里,我们需要回调完成后移除刚刚添加的操作

// 移除完成后执行的函数
AudioServicesRemoveSystemSoundCompletion(ID);


5、完成以上步骤就可以进行简单的通过自定义系统声音来播放简单且频繁的音频文件了。

6、哦,还有震动~ 一句话

// 播放系统预定义的音效,kSystemSoundID_Vibrate代表震动,如果有其它需求可以点进头文件里去找相应的提示音类型
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);


以上内容纯属个人理解,如有不当之处欢迎留言。
本站导航
相关文章
柯乐义 Copyright© keleyi.com