iOS音频播放

  • 音效播放

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

框架介绍:

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

使用:

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

使用代码如下:

//首先导入框架
#import 

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

- (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 

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

- (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音频播放)