您的位置:首页 > 移动开发 > IOS开发

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

2017-05-16 09:57 337 查看

播放系统音频的几种方式

系统提示音的播放,有一个很方便的工具类AudioToolbox

参照这里的系统提示音id对照表

#import <AudioToolbox/AudioToolbox.h>

//播放系统提示音,通过自动定义好的soundID就可以直接播放
SystemSoundID soundIDTest = 1007;
AudioServicesPlaySystemSound(soundIDTest);


这个工具类还可以播放自定义的声音文件,通过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 );


用AVFoundation播放,这个有更多的控制功能,带有delegate

NSString *filePath = [mainBundle pathForResource:@"MySong"ofType:@"mp3"];//获取音频文件
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSError *error = nil;
//可以通过NSData初始化,也可以通过FileUrl
self.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的文件系统是有沙盒隔离的,为什么直接访问系统音频的两个系统目录却有权限?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: