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

播放系统音频的几种方式

  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初始化,也可以通过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的文件系统是有沙盒隔离的,为什么直接访问系统音频的两个系统目录却有权限?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值