zoukankan      html  css  js  c++  java
  • AvAudioPlayer类是编写iOS播放器

     转载自 http://www.cnblogs.com/liukunpeng/p/3737412.html


    首先介绍一下,AvAudioPlayer它是苹果公司封装好的一个类,用起来很方便,功能也很强大,但是它只支持播放沙盒存好的音乐,不支持在线播放,是苹果公司自家ipod播放器专用的。这点大家知道即可不必深究;


    1,创建AvAudioPlayer:

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

    • 开始创建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; 表示歌曲在这个时间开始播放

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

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

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

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

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

    float volume;** 音频音量 0-1之间

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

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

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

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

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

    (readonly) NSDictionary *settings;**
    音频播放器的设置字段,包括音频和所联系的播放器信息。

    (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系统更新,调用方法不同。

    github 托管地址

    https://github.com/liukunpengiOS/iOS-MusicPlayer

    git clone 地址

    https://github.com/liukunpengiOS/iOS-MusicPlayer.git

  • 相关阅读:
    【318】C# 学习笔记
    【317】python 指定浏览器打开网页 / 文件
    【316】python.requests 读取网页信息
    【315】Windows 之间代码自动传文件
    多线程经典问题-----乘客做公交车问题解答3
    VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法
    [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,
    《Effective C++》学习笔记条款13 以对象管理资源
    抛弃编程语言的偏见——对话百度架构师
    IOS开发之UINavigationBar
  • 原文地址:https://www.cnblogs.com/allanliu/p/4269339.html
Copyright © 2011-2022 走看看