美文网首页
iOS音频播放

iOS音频播放

作者: CMD独白 | 来源:发表于2016-04-15 14:01 被阅读126次
    • 音效播放

    功能介绍:主要用于播放短小的音效,常用作系统提示音 ,使用到的框架是AudioToolBox。

    框架介绍:

    (1)SystemSoundID
    (2)AudioServicesCreateSystemSoundID
    (3)AudioServicesPlaySystemSound
    (4)AudioServicesPlayAlertSound

    使用:

    (1)声明声音ID(无符号整型), 靠声音ID来区分是哪个音效;
    (2)创建播放声音的服务(告诉系统有一个可以使用的soundID)
    (3)播放声音;

    使用代码如下:

    //首先导入框架
    #import <AudioToolbox/AudioToolbox.h>
    

    然后创建一个按钮,当点击按钮的时候播放声音,触发按钮的方法代码如下:

    - (void)playSound{
    
        //    0、导入系统框架 AudioToolBox
        //    1、声明一个soundID
        
        //    根据这个数字来区分 是哪一个 系统声音
        SystemSoundID soundID = 1;
        
        //    2、创建一个系统声音的服务
        
        AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)([[NSBundle mainBundle]URLForResource:@"胜利.aiff" withExtension:nil]), &soundID);
        
        //    3、播放系统声音
        
        AudioServicesPlaySystemSound(soundID);
    }
    
    
    • 音频播放

    功能介绍:用于播放比较长的音频、说明、音乐,使用AVFoundation框架。

    框架介绍:

    (1)AVAudioPlayer
    (2)初始化,必须声明全局变量的音乐播放对象 ,才可以播放,在退出播放页面的时候 一定要把播放对象置空 同时把delegate置空。
    (3)属性

    使用:

    (1)资源文件路径
    (2)初始化播放器
    (3)设置播放器
    (4)预播放
    (5)播放

    //首先导入框架
    #import <AVFoundation/AVFoundation.h>
    
    

    然后创建一个按钮,当点击按钮的时候播放声音,触发按钮的方法代码如下:

    - (void)playSound:(UIButton *)sender{
    
        sender.selected = !sender.selected;
        sender.selected!=YES ?[audioPlayer pause]:[audioPlayer play];
    //    [audioPlayer playAtTime:30];
    
    }
    
    
    - (void)playMusicWithName:(NSString *)name{
    
    //    error声明错误对象 如果有错误  系统会赋值给error
        NSError *error;
    //   创建一个音乐播放对象    获取文件的URL
        audioPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:name withExtension:nil] error:&error];
    //    如果有错误  打印
        if (error) {
            NSLog(@"%@",error);
        }
    //    预播放
        [audioPlayer prepareToPlay];
    //    播放
    //    [audioPlayer play];
        
    //    获取当前音乐的声道
        NSLog(@"%lu",(unsigned long)audioPlayer.numberOfChannels);
        
    //    duration :获得播放音频的时间
        
    //    设置声道  -1.0左  0.0中间  1.0右
    //    audioPlayer.pan = 1.0;
        
    //    设置音量   from 0.0 to 1.0
    //    audioPlayer.volume = 1.0;
        
    //    获得速率  必须设置enableRate为YES
    //    audioPlayer.enableRate = YES;
        
    //    设置速率  0.5是一半的速度
    //    1.0是普通
    //    2.0是双倍
    //    audioPlayer.rate = 2.0;
        
    //    获得峰值  必须设置meteringEnabled为YES
        audioPlayer.meteringEnabled = YES;
        
    //    更新峰值
        [audioPlayer updateMeters];
        
    //    获得当前峰值
        NSLog(@"%f",[audioPlayer peakPowerForChannel:2]);
        
    //    获得平均峰值
        NSLog(@"%f",[audioPlayer averagePowerForChannel:2]);
        
    //    设置播放次数
    //    负数是无限循环的
    //    0是播放一次  1是两次...
        audioPlayer.numberOfLoops = 0;
        
        audioPlayer.delegate = self;
        
    }
    
    

    AVAudioPlayer的代理方法:

    //播放完成
    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    
        NSLog(@"播放完成");
    }
    //解码出现错误的时候调用
    - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error{
        NSLog(@"");
    }
    //被打扰  开始中断的时候调用
    - (void)audioPlayerBeginInterruption:(AVAudioPlayer *)player{
    
    }
    //中断结束的时候调用
    - (void)audioPlayerEndInterruption:(AVAudioPlayer *)player withOptions:(NSUInteger)flags{
    
    }
    
    

    在跳出这个页面的时候,一定要置空,如果不置空,下次进入,就不会播放声音。

    - (void)viewDidDisappear:(BOOL)animated{
    
        [super viewDidDisappear:animated];
        
    //    如果不置空  下次再进入  就不会播放出声音
        audioPlayer = nil;
        audioPlayer.delegate = nil;
    }
    

    相关文章

      网友评论

          本文标题:iOS音频播放

          本文链接:https://www.haomeiwen.com/subject/sddnlttx.html