iOS学习记录之-AvAudioPlayer

前言:这两天老师布置了一个作业,编写一个音乐播放器的程序,使用AvAudioPlayer类。

AvAudioPlayer类是编写iOS播放器的三个类之一,其他两个以后用到再阐述。今天的主角是AvAudioPlayer。下面我们来一起看看这个类

首先介绍一下,AvAudioPlayer它是苹果公司封装好的一个类,用起来很方便,功能也很强大,但是它只支持播放沙盒存好的音乐,不支持在线播放,是苹果公司自家ipod

播放器专用的。这点大家知道即可不必深究;

好,言归正传:

1,创建AvAudioPlayer:

(1)
在工程中导入(AVFoundation.framework)框架,它是首要的,否则一切免谈,然后导入(#import <AVFoundation/AVFoundation.h>)这个头文件。

(2)
开始创建AvAudioPlayer

//这段代码是用来读取沙盒内歌曲用的

NSURL
*soundFlieUrl = [[NSBundlemainBundle]
URLForResource: _songsDatas[_index]
withExtension:@"mp3"];

//创建一个错误对象,由于API接口要求的参数是传出参数,并且是指针的指针,所以在这里定义为指针对象

NSError *error =
nil;

//创建AvAudioPlayer

AvAudioPlayer
 *avAudioPlayer  =
[[AVAudioPlayeralloc]initWithContentsOfURL:_soundFlieUrl
error:&error];

[avAudioPlayer
play];

至此我们的播放器就可以唱歌了。但如果想要功能更强大还需要设置AvAudioPlayer的诸多属性。

AvAudioPlayer属性一览:

@property(readonly,
getter=isPlaying) BOOL playing;用来表示是否是播放状态

-
(BOOL)prepareToPlay;准备播放

-
(BOOL)play;播放

-
(BOOL)playAtTime:(NSTimeInterval)time; 表示歌曲在这个时间开始播放

@property(readonly) NSUInteger numberOfChannels; 音频播放器所对应音频声道数量

@property(readonly) NSTimeInterval duration;表示曲目的总时长

@property(readonly) NSURL *url;获取创建数据的为本地的URL,如果不是通过本地URL创建,取值为nil

@property(readonly) NSData *data;获取创建的数据源为data,如果不是通过data传数据,取值为nil

@property float pan ;立体声的声道,-1是左声道,0是立体声,1是右声道

@property float volume; 音频音量 0-1之间

@property BOOL enableRate
;指定一个音频播放器调节是否可用,要想调节一个播放器速度,设置这个属性为YES,调用时机在初始化音频后和调用prepareToPlay函数前

@property float rate;音频播放速度,这个属性默认值是1.0,提供正常播放速度,0.5为速度一半,2.0为两倍速度,该值区域为0.5~2.0之间。该值起不起作用,受到enableRate影响。

@property NSTimeInterval currentTime;

音频播放所对应音频在时间线上的当前播放点。如果音频正在播放,currentTime被设置为当前播放位置到音频开始处的秒数。如果音频没有播放,currentTime被设置,play函数被调用是音频播放处到音频开始处的秒数。通过设置这个属性,你可以指定音频的特定点,后实现音频的快进后快回。

@property(readonly) NSTimeInterval deviceCurrentTime;

音频输出设备的时间值,单位秒。这个属性的值在音频播放或停止时都会单调递增。如果多个音频播放器连接到音频播放设置,设备时间会一直增加,只要有一个音频播放器处在播放或暂停状态。否则设备时间归0。使用这个属性去象征now,当调用playAtTime:函数时。通过配置多个音频播放器去播放在指定deviceCurrentTime的指定点,你可以实现精确的同步性。

@property NSInteger numberOfLoops;

设置音频循环次数。0是默认值,音频播放一次。设置一个正整数,指定播放次数正整数+1,设置一个负数,则无限循环播放,直到调用stop函数停止播放。

@property(readonly)
NSDictionary *settings ;

音频播放器的设置字段,包括音频和所联系的播放器信息。

@property(getter=isMeteringEnabled) BOOL meteringEnabled;

设置计量器是否可用,默认是关闭的。

初始化方法

-
(id)initWithContentsOfURL:(NSURL *)url
error:(NSError **)outError;

初始化返回一个播放器,播放数据源为url。

-
(id)initWithData:(NSData *)data error:(NSError **)outError;

初始化返回一个播放器,播放数据源为data。

2.-
(BOOL)prepareToPlay;

判断是否准备好音频文件,用音频播放器进行播放。

3.-
(BOOL)play;

打开音频播放器。

4.-
(BOOL)playAtTime:(NSTimeInterval)time ;

在过多少时间将要打开音频播放器。

5.-
(void)pause;

暂停音频播放器。

6.-
(void)stop;

停止音频播放器,必须把currentTime设置为0,音频播放器才会恢复到起始状态。

7.-
(void)updateMeters;

更新仪表读数

8.-
(float)peakPowerForChannel:(NSUInteger)channelNumber;

-
(float)averagePowerForChannel:(NSUInteger)channelNumber;

读取每个声道平均电平和峰值电平,代表每个声道的分贝数,范围在-100~0之间。

代理:

1.-
(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player
successfully:(BOOL)flag;

当音频播放完回调。

2.-
(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player
error:(NSError*)error;

解码错误回调。

3.-
(void)audioPlayerBeginInterruption:(AVAudioPlayer *)player;

处理中断回调。

出现例子:当用户在音频回放期间受到电话时,音频会消失,出现这种情况时AVAudioPlayer委托接受audioPlayerBeginInterruption:回调,音频会话暂时无效,并且暂停播放器。如果用户接听电话,那么应用程序中止,而应用程序委托接受一个applicationWillResignActive:回调。当通话结束,应用程序重新启动(利用applicationDidBecomeActive:回调)。如果用户拒绝接听电话那么将向委托发送audioPlayerBeginInterruption:回调。可以从此方法回复回放。

4.-
(void)audioPlayerEndInterruption:(AVAudioPlayer *)player
withOptions:(NSUInteger)flags ;

-
(void)audioPlayerEndInterruption:(AVAudioPlayer *)player
withFlags:(NSUInteger)flags;

-
(void)audioPlayerEndInterruption:(AVAudioPlayer *)player;

处理中断结束回调。这里随着iOS系统更新,调用方法不同。

        

iOS学习记录之-AvAudioPlayer,布布扣,bubuko.com

时间: 2024-10-13 21:02:20

iOS学习记录之-AvAudioPlayer的相关文章

ios学习记录 day41 UI17 多线程

CPU(工厂) 进程(车间) 线程(工人) 一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域. 打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压. 什么时候用多线程 1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库sele

ios学习记录 day42 UI18 集合视图

集合视图UICollectionView 简单来说就是多列的TableView 它们同样是datasource和delegate设计模式UICollectionViewLayout是一个对View布局和行为描述的类  UICollectionViewFlowLayout是它的子类 ios学习记录 day42 UI18 集合视图,码迷,mamicode.com

ios学习记录 day44 UI20 Storyboard 高级可视化编程 + 单例

可视化编程 : 5.0之前 xib  5.0之后 Storyboard 注意事项:1.在AppDelegate中不用代码初始化一个window   2.在general  设置 Main Interface(创建的时候自动设置的) weak可以指向 但是没有拥有权   strong有拥有权 单例特性: 1.唯一性  创建的对象永远指向同一块内存地址     2.不释放   从打开程序到后台关闭 对象都不释放 单例安全:加锁@synchronized  防止同一块内存被创建两次,破坏唯一性 //单

IOS 学习记录

表情排列 // // MJViewController.m // 01-表情排列 // // Created by apple on 13-11-24. // Copyright (c) 2013年 itcast. All rights reserved. // #import "MJViewController.h" /* 1.adjust....方法去掉第2个参数----add:(BOOL)add (不能增加全局变量或者成员变量) 2.在表情最后面增加一个“+”按钮,添加按钮在尾部

【ios学习记录】-如何定制UITableView的圆角单元格

自从ios7更新以来,UITableView控件的边角style由默认圆角变成了直角,更加适应UI扁平化设计的效果了.但对于某种情况来说,如果tableview宽度不是拉伸到与父视图等宽,那么使用直角的tableview则会显得不好看.如下图分组列表(group tableview)所示. 而如果此时采用圆角效果的话,则会显示圆润温和,用户会觉得好看,体验很好.如下图所示. 要实现以上分组列表(group tableview)的圆角效果,主要是通过Core Graphics API来实现图层重绘

【ios学习记录】- UITextField输入浮点数的限制

通常在编辑框中输入一些货品数量,金额时,我们都会做一些输入的判断限制.例如不能输入非法字符,只能输入数字等等.现把最近遇到的一些输入限制需求展现如下: 1. 输入小数位不能超过两位: 2. 不能重复输入小数点: 3. 不能输入除数字以外的字符(但不包括退格键,负号键): 4. 限制长度为最小为1,最大为11. 为了实现以上需求,主要是依靠以下UITextFieldDelegate的一个协议方法来实现的: - (BOOL)textField:(UITextField *)textField sho

学习ios笔记第一天的C语言学习记录

c语言基础学习 int num1 = 15; int num2 = 5; int temp = 0; //先把num1放到temp里 temp = num1; //先把num2放到num1里 num1 = num2; //先把temp放到num2里 num2 = temp; 算数运算符 +加法运算 -减法运算符 *乘法运算符 /除法运算符  ------整型相除取整,除数不为0 %取余运算符 ------两边均为整数 ++递增运算-------运算符在前,先执行:运算符在后,后执行: --递减运

iOS学习笔记之UITableViewController&amp;UITableView

iOS学习笔记之UITableViewController&UITableView 写在前面 上个月末到现在一直都在忙实验室的事情,与导师讨论之后,发现目前在实验室完成的工作还不足以写成毕业论文,因此需要继续思考新的算法.这是一件挺痛苦的事情,特别是在很难找到与自己研究方向相关的文献的时候.也许网格序列水印这个课题本身的研究意义就是有待考证的.尽管如此,还是要努力的思考下去.由于实验室的原因,iOS的学习进度明显受到影响,加之整理文档本身是一件耗费时间和精力的事情,因此才这么久没有写笔记了. M

IOS学习笔记 -- Modal和Quartz2D

一. Modal1.Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止;Modal只是改变了View的现实,没有改变rootViewController 2.常用方法1>.以Modal的形式展示控制器- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion2>.关