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

  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/allanliu/p/4269339.html
Copyright © 2011-2022 走看看