iOS播放系统音频的几种方式

来源:互联网 发布:linux查看centos版本 编辑:程序博客网 时间:2024/06/04 23:25

播放系统音频的几种方式

  1. 系统提示音的播放,有一个很方便的工具类AudioToolbox
    参照这里的系统提示音id对照表
#import <AudioToolbox/AudioToolbox.h>//播放系统提示音,通过自动定义好的soundID就可以直接播放SystemSoundID soundIDTest = 1007;AudioServicesPlaySystemSound(soundIDTest);
  1. 这个工具类还可以播放自定义的声音文件,通过AudioServicesCreateSystemSoundID创建一个soundId就能播放
#import <AudioToolbox/AudioToolbox.h>//播放test.wav文件static SystemSoundID soundIDTest = 0;//当soundIDTest == kSystemSoundID_Vibrate的时候为震动NSString * path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];//这个path也可以是系统音频文件夹的位置//提示音音频文件位置:/System/Library/Audio/UISounds//电话音频文件位置:/Library/Ringtones//NSString * path = @"/Library/Ringtones/Waves.m4r"if (path) {     AudioServicesCreateSystemSoundID( (__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundIDTest );}AudioServicesPlaySystemSound( soundIDTest );
  1. 用AVFoundation播放,这个有更多的控制功能,带有delegate
NSString *filePath = [mainBundle pathForResource:@"MySong"ofType:@"mp3"];//获取音频文件NSData *fileData = [NSData dataWithContentsOfFile:filePath];NSError *error = nil;//可以通过NSData初始化,也可以通过FileUrlself.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileDataerror:&error];//fileUrl初始化//NSURL *url = [NSURL fileURLWithPath:filePath];//AVAudioPlayer *avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];if (self.audioPlayer != nil){    self.audioPlayer.delegate = self;if ([self.audioPlayer prepareToPlay] &&[self.audioPlayer play]){      //成功播放音乐} else {//播放失败}} else {/*无法实例AVAudioPlayer*/}#pragma mark - 播放器代理方法-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{    NSLog(@"音乐播放完成...");}

疑问

既然iOS的文件系统是有沙盒隔离的,为什么直接访问系统音频的两个系统目录却有权限?

原创粉丝点击