iOS.AVFoundation.AVAudioPlayer

iOS.AVFoundation.AVAudioPlayer

Morris_ 2019.01.07

前言

做流媒体相关的开发工作,对AVFoundation和AVKit这两个框架的学习是很有必要的,可能还有美颜等这些功能。

AVFoundation和AVKit框架功能很强大,感觉有点不知道从何下手的感觉,那就一点一点来看吧。这里先看AVFoundation。

AVFoundation框架结构

打开查看AVFoundation文档,里面包含有一个AFVAudio的Framework。看类名,这个库应该是提供音频相关功能的类吧。Headers里面是所有这个框架里的类。

本篇学习AVAudioPlayer

AVAudioPlayer

An audio player that provides playback of audio data from a file or memory.

官方文档

这个类的主要功能就是音频播放相关功能:

  • Play sounds of any duration

播放连续的音频

  • Play sounds from files or memory buffers

    播放本地音频文件,或者在缓存中的音频。

  • Loop sounds

    循环播放,可以设置循环播放的次数等。

  • Play multiple sounds simultaneously, one sound per audio player, with precise synchronization

    可以同时播放多个音频,当然每个音频需要一个player。

  • Control relative playback level, stereo positioning, and playback rate for each sound you are playing

    播放的控制,暂停、继续什么的。

  • Seek to a particular point in a sound file, which supports such application features as fast forward and rewind

    seek功能,快进快退等。

  • Obtain data you can use for playback-level metering

    what

AVAudioPlayer.h

1、初始化

常用的初始化方法有两个

- (nullable instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;
- (nullable instancetype)initWithData:(NSData *)data error:(NSError **)outError;

一个播放连接地址的音频,这个我没试,一个是播放本地音频文件。

2、播放以及控制
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@".mp3"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSError *outEoorr = nil;
_audioPlayer = [[AVAudioPlayer alloc] initWithData:data error:&outEoorr];
_audioPlayer.volume = 0.5;

if ([_audioPlayer prepareToPlay]) {
    NSLog(@"播放");
    [_audioPlayer play];
}

播放存储在手机沙盒下的音频文件

NSString *filePath = ...
NSError *outError = nil;
NSURL *pathURL = [NSURL fileURLWithPath:filePath];
NSData *data = [NSData dataWithContentsOfURL:pathURL];
AVAudioPlayer *curPlayer = [[AVAudioPlayer alloc] initWithData:data error:&outError];
curPlayer.delegate = self;
if (outError) {
    NSLog(@"音频播放器创建失败:%@",outError);
} else {
    self.audioPlayer = curPlayer;
    if ([self.audioPlayer prepareToPlay]) {
        [self.audioPlayer play];
    }
}

这就播出来了,其他的暂停、继续什么的,或者设置播放进度,和一般的音乐播放器一样。

属性/方法描述
- play播放
- playAtTime从指定的时间处开始播放
- pause暂停
- stop停止播放
- prepareToPlay预加载,就是loading一段音频buffers
volume音量设置
pan这个属性可以用来设置左右声道,设置范围是-1.0 is left, 0.0 is center, 1.0 is right
rate可以设置播放速率,也就是我们所说的倍速播放,1.0 is normal, 0.5 is half speed, 2.0 is double speed
-averagePowerForChannel:(NSUInteger)channelNumber获得指定声道的分贝平均值,注意如果要获得分贝平均值必须在此之前调用updateMeters方法
- peakPowerForChannel:(NSUInteger)channelNumber获得指定声道的分贝峰值,注意如果要获得分贝峰值必须在此之前调用updateMeters方法
- updateMeters更新音频测量值,注意如果要更新音频测量值必须设置meteringEnabled为YES,通过音频测量值可以即时获得音频分贝等信息

这里播放的是本地文件,直接读取就播放了,不调用prepareToPlay也可以播放,但是如果是播放网络地址的音频,则一定是需要先prepareToPlay的。

看了看代理事件,其中并没有播放进度的回调,也没有播放进度的监听之类的东西。看了下网上清一色的用timer,获取currentTime。

3、获取播放信息
属性/方法描述
duration播放时长度
numberOfLoops设置循环播放次数
currentTime当前播放的时长
其他
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Morris_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值