这篇同样是编者对自己学习的小总结以及对iOS初级开发者的小福利,大神莫吐槽...
首先来谈谈AVFoundation框架:它是iOS中用于处理基于时间的媒体数据的高级框架,也是基于Core Audio,Core Media,Core Video等框架构建的,充分利用了多核硬件的优势并大量使用了Block和GCD机制。
所有的iOS App都具有默认的音频会话,它定义了以下行为:
可以播放音频,但是不能录制音频。
静音模式下App播放的所有音频都会静音。
设备锁定时音频处于静音状态。
App播放音频时所有后台播放的音频都会静音。
iOS系统中音频播放方式:AVAudioPlayer,AVPlayer,播放系统声音,音频队列(小编也不熟...)。
AVAudioPlayer:使用简单,功能强大,但只能播放本地音频。
AVPlayer:可以播放网络音频,本地音频和流媒体播放,但处理音频不够灵活。
播放系统声音:系统声音属于非压缩的存储类型,但是系统声音时长短,不超过30s,格式为 : caf / wav / aiff。
举例:AVAudioPlayer
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () <AVAudioPlayerDelegate> { AVAudioPlayer *_audioPlayer; AVPlayer *_avPlayer; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //AVAudioPlayer //查找本地音乐文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"多远都要在一起" ofType:@"mp3"]; //构建URL NSURL *url2 = [NSURL fileURLWithPath:filePath]; //创建音乐播放器 _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url2 error:nil]; //根据URL地址来读取音乐文件(写在ViewDidLoad中会自动播放) [_audioPlayer prepareToPlay]; _audioPlayer.delegate = self; } - (IBAction)play:(id)sender { [_audioPlayer play]; } - (IBAction)pause:(id)sender { [_audioPlayer pause]; }
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () <AVAudioPlayerDelegate> { AVAudioPlayer *_audioPlayer; AVPlayer *_avPlayer; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //在iOS9之后,苹果对http访问进行了限制,需要设置info.plist文件 //在info.plist文件中加入字段App Transport Secruity Settings //在其中添加Allow Arbitrary Loads ------ YES //使用AVPlayer来播放在线音乐 //@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357/mp3" //创建URL NSURL *url = [NSURL URLWithString:@"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3"]; //创建播放器 _avPlayer = [[AVPlayer alloc] initWithURL:url]; [_avPlayer play]; }
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () <AVAudioPlayerDelegate> { AVAudioPlayer *_audioPlayer; AVPlayer *_avPlayer; SystemSoundID soundID; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //播放系统声音 //查找声音文件(此声音文件是编者自己添加到程序包中去的) NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"44th Street Medium" ofType:@"caf"]; //构建URL NSURL *url3 = [NSURL fileURLWithPath:filePath2]; //创建系统声音ID SystemSoundID soundID; //注册声音文件,并且将ID保存 AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url3), &soundID); //播放声音 AudioServicesPlaySystemSound(soundID); } //移除系统声音 - (void)dealloc { //移除注册的系统声音 AudioServicesRemoveSystemSoundCompletion(soundID); }