AVAudioPlayer相当于一个播放器,它支持多种音频格式,而且能够进行进度、音量、播放速度等控制。

下边通过代码来看一下,它的属性和常用方法(具体说明都写在了注释中):

    //AVAudioPlayer使用比较简单
/*
1.初始化AVAudioPlayer对象
这里有两种init方法可以初始化AVAudioPlayer对象
1)- (instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError
使用文件URL初始化播放器,注意这个URL不能是HTTP URL,AVAudioPlayer不支持加载网络媒体流,只能播放本地文件
2)- (instancetype)initWithData:(NSData *)data error:(NSError **)outError
使用NSData初始化播放器,注意使用此方法时必须文件格式和文件后缀一致,否则出错,所以相比此方法更推荐使用上述方法或- (instancetype)initWithData:(NSData *)data fileTypeHint:(NSString *)utiString error:(NSError **)outError方法进行初始化
*/
NSString *path = [[NSBundle mainBundle] pathForResource:@"" ofType:@"mp3"];
NSError *error;
AVAudioPlayer *audioplayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL URLWithString:path] error:&error]; /**
AVAudioPlayer对象的常见属性
*/
//.playing 是否正在播放,readonly
BOOL isPlaying = audioplayer.playing;
//.numberOfChannels 音频声道数,readonly
BOOL numberofChannels = audioplayer.numberOfChannels;
//.duration 音频时长,readonly
NSTimeInterval MusicDuration = audioplayer.duration;
//.url 音频文件的路径 readonly
NSURL *MusicUrl = audioplayer.url;
//.data 音频数据 readonly
NSData *MusicData = audioplayer.data;
//.pan 立体声平衡 如果为-1.0则完全左声道,如果0.0则左右声道平衡,如果为1.0则完全为右声道
audioplayer.pan = 0.0;
//.volume 音量大小,范围0-1.0
audioplayer.volume = 0.5;
//.enableRate 是否允许改变播放速率
//播放速率,范围0.5-2.0,如果为1.0则正常播放,如果要修改播放速率则必须设置enableRate为YES
audioplayer.enableRate = YES;
audioplayer.rate = 1.0;
//.currentTime 当前播放时长
NSTimeInterval MusicCurrentTime = audioplayer.currentTime;
//.deviceCurrentTime 输出设备播放音频的时间
NSTimeInterval deviceCurrentTime = audioplayer.deviceCurrentTime;
//.numberOfLoops 循环播放次数,如果为0则不循环,如果小于0则无限循环,大于0则表示循环次数
audioplayer.numberOfLoops = ;
//音频播放设置信息,只读
NSDictionary *settingDic = audioplayer.settings; /**
* 对象方法
*/
//- (BOOL)prepareToPlay; 加载音频文件到缓冲区,注意即使在播放之前音频文件没有加载到缓冲区程序也会隐式调用此方法。
[audioplayer prepareToPlay];
//- (BOOL)play; 播放音频文件
[audioplayer play];
//- (BOOL)playAtTime:(NSTimeInterval)time 在指定的时间开始播放音频
[audioplayer playAtTime:];
//- (void)pause; 暂停播放
[audioplayer pause];
//- (void)stop; 停止播放
[audioplayer stop];
//@property(nonatomic, copy) NSArray *channelAssignments 获得或设置播放声道
NSArray *channelArr = audioplayer.channelAssignments; /**
代理方法 * - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
//音频播放完成 - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
//音频解码发生错误
*/

上边代码就是AVAudioPlayer的简单介绍,接下来,直接上代码,看一下一个简单的音乐播放的实现,可播放、暂停。

@interface ViewController ()<AVAudioPlayerDelegate>
- (IBAction)clickplay:(id)sender;
- (IBAction)clickpause:(id)sender;
@property (weak, nonatomic) IBOutlet UIProgressView *progress; @property (strong,nonatomic) AVAudioPlayer *audioPlayer;//播放器 @property (weak,nonatomic) NSTimer *timer;//进度更新定时器 @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} /**
* 设置定时器,每0.5秒,更新一次播放进度条
*
* @return timer
*/
-(NSTimer *)timer{
if (!_timer) {
_timer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
}
return _timer;
} -(void)updateProgress{
NSLog(@"updateProgress");
float progress = self.audioPlayer.currentTime / self.audioPlayer.duration;
self.progress.progress = progress;
} /**
* 创建播放器
*
* @return 音频播放器
*/
-(AVAudioPlayer *)audioPlayer{
if (!_audioPlayer) {
NSString *urlStr = [[NSBundle mainBundle]pathForResource:@"" ofType:@"mp3"];
NSURL *url = [NSURL URLWithString:urlStr];
NSError *error = nil;
//初始化播放器,这里的url只支持文件路径,不支持HTTP url
_audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
//设置播放器属性
_audioPlayer.numberOfLoops = ;//设置为0表示不循环
_audioPlayer.delegate = self;
[_audioPlayer prepareToPlay];
if (error) {
NSLog(@"初始化播放器过程发生错误,错误信息:%@",error);
return nil;
}
}
return _audioPlayer;
} /**
* 播放音频
*/
-(void)play{
if (!self.audioPlayer.isPlaying) {
[self.audioPlayer play];
self.timer.fireDate = [NSDate distantPast];
}
} /**
* 暂停播放
*/
-(void)pause{
if (self.audioPlayer.isPlaying) {
[self.audioPlayer pause];
self.timer.fireDate = [NSDate distantFuture];
}
} //play
- (IBAction)clickplay:(id)sender {
[self play];
}
//pause
- (IBAction)clickpause:(id)sender {
[self pause];
} #pragma mark - delegate
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
NSLog(@"播放完毕");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
self.timer.fireDate = [NSDate distantFuture];
});
} -(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{
NSLog(@"解码失败");
}

AVFoundation(一)---AVAudioPlayer的更多相关文章

  1. IOS开发中AVFoundation中AVAudioPlayer的使用

    IOS开发中如何调用音频播放组件 1.与音频相关的头文件等都在AVFoundation.h中,所以第一步是添加音频库文件: #import <AVFoundation/AVFoundation. ...

  2. AVAudioSesion和AVAudioPlayer的基本使用

    iOS基础篇-AVPLayer和AVAudioSession 2018.02.27 16:17 字数 215 阅读 1516评论 0喜欢 4 作用 AVPLayer:可以用来播放在线及本地音视频 AV ...

  3. 《转》iOS音频视频初级开发

    代码改变世界 Posts - 73, Articles - 0, Comments - 1539 Cnblogs Dashboard Logout HOME CONTACT GALLERY RSS   ...

  4. AVAudioPlayer

    AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework. AVAudioPlayer类封装了播放单个声音的能力.播放器可以用NSURL或 ...

  5. iOS播放器 - AVAudioPlayer

    今天记录一下AVAudioPlayer,这个播放器类苹果提供了一些代理方法,主要用来播放本地音频. 其实也可以用来播放网络音频,只不过是将整个网络文件下载下来而已,在实际开发中会比较耗费流量不做推荐. ...

  6. AVAudioPlayer播放本地音频

    AVAudioPlayer苹果官方上说一般用于播放本地音频,不能用于播放网络上的音频. 具体的代码:先导入 #import <AVFoundation/AVFoundation.h> // ...

  7. AVAudioPlayer播放并实现了后台播放和远程控制

    // ViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @class ...

  8. iOS - AVAudioPlayer 音频播放

    前言 NS_CLASS_AVAILABLE(10_7, 2_2) @interface AVAudioPlayer : NSObject @available(iOS 2.2, *) public c ...

  9. 音乐播放器 AVAudioPlayer、定时器、UISlider

    #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface ViewController ...

随机推荐

  1. HDU 5831 Rikka with Parenthesis II

    如果左括号数量和右括号数量不等,输出No 进行一次匹配,看匹配完之后栈中还有多少元素: 如果n=2,并且栈中无元素,说明是()的情况,输出No 如果n=2,并且栈中有元素,说明是)(的情况,输出Yes ...

  2. jquery无法为动态生成的元素添加点击事件的解决方法

    遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <d ...

  3. input、button、a标签 等定义的按钮尺寸的兼容性问题

    在项目中有遇到这类问题,搜索了一下解决方式,采用链接:https://segmentfault.com/q/1010000000190931 里各位楼主的答案,摘抄如下: 例子如下: HTML: &l ...

  4. C#获取数字证书

    string Thumbprint = "C2489D912F247C187AA14B1291A6fB612281225D"; X509Store store = new X509 ...

  5. linux命令 awk

    awk的工作流程如下: 读入有 '\n' 换行符分割的一跳记录,然后将记录按指定的域分隔划分域,填充域,$0 表示所有域, $1 表示第一个域, $n 表示第n个域.默认域分隔符为“空白键”或者“[t ...

  6. mysql数据库root密码忘记的修改

    注:此方法root的密码可以设置成功,但是重新开启服务时可能会出现中断的异常. 1.修改MySQL的root密码,需要先关闭MySQL的服务 2.进入命令行窗口,进入MySQL的安装路径bin目录下, ...

  7. CVE-2014-1767 漏洞分析(2015.1)

    CVE-2014-1767 漏洞分析 1. 简介 该漏洞是由于Windows的afd.sys驱动在对系统内存的管理操作中,存在着悬垂指针的问题.在特定情况下攻击者可以通过该悬垂指针造成内存的doubl ...

  8. cookie机制和session机制的区别(面试题)

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  9. 12C CLONE PDB and config service_listener

    Clone PDB PtestDEV to Ptestuat in testuat 1)       Clone PtestDEV to Ptestuat C:\Windows\system32> ...

  10. 项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website automatically】

    在上一篇教程项目管理实践[三]每日构建[Daily Build Using CruiseControl.NET and MSBuild] 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目 ...