- 音效播放
功能介绍:主要用于播放短小的音效,常用作系统提示音 ,使用到的框架是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;
}