• IOS播放音频 AVAudioPlayer(实例)


    1. AVFoundation

    Build Phases => Link Binary With Libraies => + => AVFoundation.framework => add

    firstviewcontroller.h

    C代码 复制代码 收藏代码
    1. #import <UIKit/UIKit.h>  
    2. #import <AVFoundation/AVFoundation.h>  
    3.   
    4. @interface FirstViewController : UIViewController  
    5. {    
    6.     __weak IBOutlet UILabel *label;  
    7.     AVAudioPlayer *player;  
    8. }  
    9.   
    10. - (IBAction)toplay:(id)sender;  
    11.   
    12. @end  
    #import <UIKit/UIKit.h>
    #import <AVFoundation/AVFoundation.h>
    
    @interface FirstViewController : UIViewController
    {  
        __weak IBOutlet UILabel *label;
        AVAudioPlayer *player;
    }
    
    - (IBAction)toplay:(id)sender;
    
    @end

    firstviewcontroller.m

    C代码 复制代码 收藏代码
    1. - (IBAction)toplay:(id)sender   
    2. {  
    3.     NSURL  *url = [NSURL fileURLWithPath:[NSString  stringWithFormat:@"%@/test.mp3",  [[NSBundle mainBundle]  resourcePath]]];  
    4.       
    5.     NSError  *error;  
    6.     player  = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];  
    7.          
    8.     player.numberOfLoops = -1;  
    9.     [player play];  
    10.       
    11.     [label setText:@"Play ..."];  
    12. }  
    - (IBAction)toplay:(id)sender 
    {
        NSURL  *url = [NSURL fileURLWithPath:[NSString  stringWithFormat:@"%@/test.mp3",  [[NSBundle mainBundle]  resourcePath]]];
        
        NSError  *error;
        player  = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
           
        player.numberOfLoops = -1;
        [player play];
        
        [label setText:@"Play ..."];
    }
    

    或者:

    C代码 复制代码 收藏代码
    1. NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"];   
    2. NSError  *error;   
    3. player = [[AVAudioPlayer alloc]initWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:path]error:&error];   
    4. [player prepareToPlay];  
    5. player.numberOfLoops = -1;  
    6. [player play];  
    NSString *path = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"]; 
    NSError  *error; 
    player = [[AVAudioPlayer alloc]initWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:path]error:&error]; 
    [player prepareToPlay];
    player.numberOfLoops = -1;
    [player play];

    test.mp3 拖放到 Supporting Files 文件夹。

    播放,暂停和停止

    C代码 复制代码 收藏代码
    1. [player play];  //播放  
    2. [player pause]; //暂停  
    3. [player stop];  //停止  
    [player play];  //播放
    [player pause]; //暂停
    [player stop];  //停止

    更多功能:

    1. 音量:

    Java代码 复制代码 收藏代码
    1. player.volume=0.8;//0.0~1.0之间    
    player.volume=0.8;//0.0~1.0之间  

    2. 循环次数

    C代码 复制代码 收藏代码
    1. player.numberOfLoops = 3;//默认只播放一次 负数(-1)为无限循环  
    player.numberOfLoops = 3;//默认只播放一次 负数(-1)为无限循环

    3.播放位置

    C代码 复制代码 收藏代码
    1. player.currentTime = 15.0;//可以指定从任意位置开始播放   
    player.currentTime = 15.0;//可以指定从任意位置开始播放 

    3.1 显示当前时间

    C代码 复制代码 收藏代码
    1. NSLog(@"%f seconds played so  far", player.currentTime);  
    NSLog(@"%f seconds played so  far", player.currentTime);

    4.声道数

    C代码 复制代码 收藏代码
    1. NSUInteger channels = player.numberOfChannels;//只读属性   
    NSUInteger channels = player.numberOfChannels;//只读属性 

    5.持续时间

    C代码 复制代码 收藏代码
    1. NSTimeInterval duration = player.dueration;//获取采样的持续时间    
    NSTimeInterval duration = player.dueration;//获取采样的持续时间  

    6.仪表计数

    C代码 复制代码 收藏代码
    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. }  
    player.meteringEnabled = YES;//开启仪表计数功能
    [ player updateMeters];//更新仪表读数
    //读取每个声道的平均电平和峰值电平,代表每个声道的分贝数,范围在-100~0之间。
    for(int i = 0; i<player.numberOfChannels;i++){
    float power = [player averagePowerForChannel:i];
    float peak = [player peakPowerForChannel:i];
    }

    7. 初始化播放器  

    C代码 复制代码 收藏代码
    1. [player prepareToPlay];  
    [player prepareToPlay];

    8. 判断是否正在播放

    C代码 复制代码 收藏代码
    1. [player isPlaying]  
    [player isPlaying]

    9、代理方法

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

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

    C代码 复制代码 收藏代码
    1. player.delegate = self;    
    player.delegate = self;  
    C代码 复制代码 收藏代码
    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.     //处理中断结束的代码  
    12. }  
    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{
        //播放结束时执行的动作
    }
    - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer*)player error:(NSError *)error{
        //解码错误执行的动作
    }
    - (void)audioPlayerBeginInteruption:(AVAudioPlayer*)player{
        //处理中断的代码
    }
    - (void)audioPlayerEndInteruption:(AVAudioPlayer*)player{
        //处理中断结束的代码
    }
    

      

    参考:

    http://blog.csdn.net/xys289187120/article/details/6595919

    http://blog.csdn.net/iukey/article/details/7295962

    视频:

    http://www.youtube.com/watch?v=kCpw6iP90cY

    2. AudioToolbox

    Build Phases => Link Binary With Libraies => + => AudioToolbox.framework => add

    firstviewcontroller.h

    C代码 复制代码 收藏代码
    1. #import <UIKit/UIKit.h>  
    2. #import <AudioToolbox/AudioToolbox.h>  
    3.   
    4. @interface FirstViewController : UIViewController  
    5. {    
    6. }  
    7.   
    8. - (IBAction)toplay:(id)sender;  
    9.   
    10. @end  
    #import <UIKit/UIKit.h>
    #import <AudioToolbox/AudioToolbox.h>
    
    @interface FirstViewController : UIViewController
    {  
    }
    
    - (IBAction)toplay:(id)sender;
    
    @end

    firstviewcontroller.m

    C代码 复制代码 收藏代码
    1. - (IBAction)toplay:(id)sender  
    2. {  
    3.     CFBundleRef mainBundle = CFBundleGetMainBundle();  
    4.     CFURLRef soundFileURLRef;  
    5.     soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"sound1", CFSTR ("wav"), NULL);  
    6.       
    7.     UInt32 soundID;  
    8.     AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);  
    9.     AudioServicesPlaySystemSound(soundID);  
    10. }  
    - (IBAction)toplay:(id)sender
    {
        CFBundleRef mainBundle = CFBundleGetMainBundle();
        CFURLRef soundFileURLRef;
        soundFileURLRef = CFBundleCopyResourceURL(mainBundle, (CFStringRef) @"sound1", CFSTR ("wav"), NULL);
        
        UInt32 soundID;
        AudioServicesCreateSystemSoundID(soundFileURLRef, &soundID);
        AudioServicesPlaySystemSound(soundID);
    }

    视频:

    http://www.youtube.com/watch?v=lSJhYx28Krg&feature=youtu.be

  • 相关阅读:
    征战蓝桥 —— 2013年第四届 —— C/C++A组第7题——错误票据
    征战蓝桥 —— 2013年第四届 —— C/C++A组第5题——前缀判断
    征战蓝桥 —— 2013年第四届 —— C/C++A组第5题——前缀判断
    征战蓝桥 —— 2013年第四届 —— C/C++A组第5题——前缀判断
    征战蓝桥 —— 2013年第四届 —— C/C++A组第4题——颠倒的价牌
    征战蓝桥 —— 2013年第四届 —— C/C++A组第4题——颠倒的价牌
    征战蓝桥 —— 2013年第四届 —— C/C++A组第4题——颠倒的价牌
    单例模式中的多线程安全问题分析
    单例模式中的多线程安全问题分析
    每个程序员都应该警惕的文件上传漏洞!!
  • 原文地址:https://www.cnblogs.com/lovewx/p/4031583.html
Copyright © 2020-2023  润新知