iOS开发————几种音频播放方式
这篇同样是编者对自己学习的小总结以及对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];
}
举例:AVPlayer
#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);
}