关于AVAudioPlayer

IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。

此文主要讲AVAudioPlayer,其他两个请见相关文章。

AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework。

AVAudioPlayer类封装了播放单个声音的能力。播放器可以用NSURL或者NSData来初始化,要注意的是NSURL并不可以是网络url而必须是本地文件URL,因为       AVAudioPlayer不具备播放网络音频的能力,不过我们可以用过一点小手段使其具备这个能力,留待稍后讲解。

一个AVAudioPlayer只能播放一个音频,如果你想混音你可以创建多个AVAudioPlayer实例,每个相当于混音板上的一个轨道。

一、创建一个播放器


  1. #import <AVFoundation/AVFoundation.h>
  2. NSError* err;
  3. AVAudioPlayer* player = [[AVAudioPlayer alloc]
  4. initWithContentsOfURL:[NSURL fileURLWithPath:
  5. [[NSBundle mainBundle]pathForResource:
  6. @"music" ofType:@"m4a"
  7. inDirectory:@"/"]]
  8. error:&err ];//使用本地URL创建


  1. AVAudioPlayer* player = [[AVAudioPlayer alloc]
  2. initWithData:myData
  3. error:&err ];//使用NSData创建

我之前讲过AVAudioPlayer不可以播放网络URL,但是可以播放NSData,我们似乎受到了点启发,我们可以通过网络URL去创建NSData,然后在通过AVAudioPlayer来播放NSData,这样是不是就可以播放网络音乐了呢?但是此法并不可取,因为AVAudioPlayer只能播放一个完整的文件,并不支持流式播放,所以必须是缓冲完才能播放,所以如果网络文件过大抑或是网速不够岂不是要等很久?所以播放网络音频我们一般用音频队列。

二、播放器属性

创建一个AVAudioPlayer以后你就可以对它的各种属性进行访问或设置了 。

1.音量


player.volume=0.8;//0.0~1.0之间

2.循环次数


player.numberOfLoops = 3;//默认只播放一次

3.播放位置


  1. player.currentTime = 15.0;//可以指定从任意位置开始播放

4.声道数


  1. NSUInteger channels = player.numberOfChannels;//只读属性

5.持续时间


  1. NSTimeInterval duration = player.dueration;//获取采样的持续时间

6.仪表计数


  1. player.meteringEnabled = YES;//开启仪表计数功能
  2. [ player updateMeters];//更新仪表读数
  3. //读取每个声道的平均电平和峰值电平,代表每个声道的分贝数,范围在-100~0之间。
  4. for(int i = 0; i<player.numberOfChannels;i++){
  5. float power = [player averagePowerForChannel:i];
  6. float peak = [player peakPowerForChannel:i];
  7. }

三、播放声音

准备了这么久,终于可以播放了,心情激动啊。


  1. [ player prepareToPlay];//分配播放所需的资源,并将其加入内部播放队列
  2. [player play];//播放
  3. [player stop];//停止

是否觉得准备了这么久,一下子就结束掉了,太快了,不用急,还有几个重点。

四、代理方法

加入播放出现异常,或者被更高级别的系统任务打断,我们的程序还没来得及收场就挂了,怎么办?不急,我们可以通过几个委托方法很好地处理所有的情形。

首先给player设置委托是必须的:

 

  1. player.delegate = self;


  1. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{
  2. //播放结束时执行的动作
  3. }
  4. - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer*)player error:(NSError *)error{
  5. //解码错误执行的动作
  6. }
  7. - (void)audioPlayerBeginInteruption:(AVAudioPlayer*)player{
  8. //处理中断的代码
  9. }
  10. - (void)audioPlayerEndInteruption:(AVAudioPlayer*)player{
  11. //处理中断结束的代码  }
时间: 2025-01-03 23:37:34

关于AVAudioPlayer的相关文章

AVAudioplayer时error解决 创建失败 ERror creating player: Error Domain=NSOSStatusErrorDomain Code=2003334207 &quot;(null)&quot;

AVAudioplayer 有两个初始化方法: 1.[[AVAudioPlayer alloc] initWithData:musicData error&e]; 2.[[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 第一种是使用将音频文件的data文件初始化,但是data必须是一个完整的文件. 第二种是从url获取,但是这里的url是本地的file URL. 所以AVAudioplayer无法直接从网络

iOS开发总结(A0)- AVAudioPlayer

AVAudioPlayer是AVFoundation框架中播放音频的一个类,此次使用的比较简单,今后涉及音频方面的用法,再增加总结 每个AVAudioPlayer对应一个音频,主要创建方法为 - (instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; - (instancetype)initWithData:(NSData *)data error:(NSError **)outError; 推荐格

AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

下面是ipad上的调试效果 下面是代码,代码中都有注释: #import <UIKit/UIKit.h>  #import <AVFoundation/AVFoundation.h>  #import <MediaPlayer/MediaPlayer.h>   @interface RootViewController : UIViewController <AVAudioPlayerDelegate> {     AVAudioPlayer *player

再IOS9中请求http地址的时候会报的错误解决。AVAudioPlayer为什么代码没有问题但是播放不出来的原因

在新版的Xcode7.1中在请求HTTP的时候总会报一些错误,只要有http的请求都会报错,在iOS9 中,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据 报的错大概是有2种 第一种:App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via

AVAudioPlayer播放音频文件时没声音

AVAudioPlayer播放一个mp3文件时,居然没有声音.mp3文件是放在工程里面的,路径没有错误但就是死活没有声音. func playSound() { let notifyUrl = NSBundle.mainBundle().pathForResource("notify", ofType: "mp3") //let notifyUrl = NSBundle.mainBundle().resourcePath?.stringByAppendingPath

AVAudioPlayer简易封装

[说明] AVAudioPlayer简易封装,仅仅支持播放,暂停,停止,暂停时候带有渐隐效果,自己用,没有参考价值. [源码] https://github.com/YouXianMing/AVAudioPlayer- 一个定时器的封装类源码(该定时器可以指定运行的次数) // // SpecialTimer.h // Music // // Created by XianMingYou on 15/4/13. // Copyright (c) 2015年 XianMingYou. All ri

iOS学习记录之-AvAudioPlayer

前言:这两天老师布置了一个作业,编写一个音乐播放器的程序,使用AvAudioPlayer类. AvAudioPlayer类是编写iOS播放器的三个类之一,其他两个以后用到再阐述.今天的主角是AvAudioPlayer.下面我们来一起看看这个类 首先介绍一下,AvAudioPlayer它是苹果公司封装好的一个类,用起来很方便,功能也很强大,但是它只支持播放沙盒存好的音乐,不支持在线播放,是苹果公司自家ipod 播放器专用的.这点大家知道即可不必深究: 好,言归正传: 1,创建AvAudioPlay

iOS AvPlayer AvAudioPlayer音频的后台播放问题

王桂敏 iOS AvPlayer AvAudioPlayer音频的后台播放问题 iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要,可能需要实现几个关键的功能. 首先,播放音频之前先要设置AVAudioSession模式,通常只用来播放的App可以设为AVAudioSessionC

AVAudioPlayer 听筒播放和外音播放切换

- (IBAction)playPause:(UIButton *)sender{ //初始化播放器的时候如下设置 UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); UInt32 audioRouteOverride