IOS AVFoundation的录音与播放
这是我第一次撰写博客,大部分内容都来自网络,写的不对地方还请多多指教,如果有摘录的地方与原作略有相同还请谅解说明。请多多支持。
1,AVAudioSession的使用
AVAudioSession是一个单例模式。在IOS7以前可以不用设置,在IOS7上不设置AVAudioSession则不可以录音。
一,设置AVAudioSession的类别(部分)及开启音频会话
Category(类别) | 作用 |
AVAudioSessionCategoryPlayback | 后台播放 |
AVAudioSessionCategoryRecord | 录音 |
AVAudioSessionCategoryPlayAndRecord | 后台播放及录音 |
具体代码如下:
//录音权限设置
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
//设置类别只支持录音
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
//启动音频会话管理,此时会阻断后台音乐的播放
[audioSession setActive:YES error:nil];
二,在录音或播放结束后,要关闭音频会话,来延续后台音乐的播放
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:NO error:nil];
三,要想启用其他程序的后台音乐播放,则要用如下设置
AVAudioSession * audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
[audioSession setActive:NO withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil];
2,AVAudioRecorder的基本使用
一,设置参数
重点 | 作用 | 值 |
AVFormatIDKey | 录音格式 | kAudioFormatMPEG4AAC,kAudioFormatLinearPCM ... |
AVSampleRateKey |
录音采样率 影响音频的质量 |
8000,44100,96000 |
AVNumberOfChannelsKey | 录音通道数 | 1或2 |
AVLinearPCMBitDepthKey | 线性采样位数 | 8,16,24,32 |
AVEncoderAudioQualityKey | 录音质量 |
AVAudioQualityMin,AVAudioQualityLow,
AVAudioQualityMedium,AVAudioQualityHigh,
AVAudioQualityMax
|
二,保存路径的网址设置
// CFUUID每次都会产生一个唯一号
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
NSString * cfuuidString =(NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
NSString * catchPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString * audioRecordFilePath = [catchPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.AAC”,cfuuidString];
NSURL * url = [NSURL fileURLWithPath:audioRecordFilePath];
三,AVAudioRecorder初始化
NSError *error = nil;
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&error];
四,所有代码如下:
//录音参数设置设置
NSMutableDictionary * recordSetting = [[NSMutableDictionary alloc] init];
//设置录音格式
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
//设置录音采样率
[recordSetting setValue:[NSNumber numberWithFloat:44100] forKey:AVSampleRateKey];
//录音通道数
[recordSetting setValue:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
//线性采样位数
[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
//录音的质量
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh] forKey:AVEncoderAudioQualityKey];
//录音文件保存的网址
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
NSString *cfuuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
NSString *catchPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *audioRecordFilePath = [catchPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.AAC", cfuuidString];
NSURL *url = [NSURL fileURLWithPath:audioRecordFilePath];
NSError *error = nil;
//初始化AVAudioRecorder
_recorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&error];
if (!error){//NSLog(@"初始化录音错误:%@", error);
} else {if ([_recorder prepareToRecord]){//录音最长时间设置[_recorder recordForDuration:20];//委托事件_recorder.delegate = self;[_recorder record];//开启音量检测_recorder.meteringEnabled = YES;//开启定时器,音量监测_timer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(volumeMeters:) userInfo:nil repeats:YES];}
}
#pragma mark 实时监测音量变化定时器任务
- (void)volumeMeters:(NSTimer *)timer
{//刷新音量数据[_recorder updateMeters];double lowPassResults = POW(10, (0.05 * [_recorder peakPowerForChannel:0]));if(0 <lowPassResults <= 0.14){}else if(0.14 <lowPassResults <= 0.28){}else if(0.28 <lowPassResults <= 0.42){}else if(0.42 <lowPassResults <= 0.56){}else if(0.56 <lowPassResults <= 0.7){}else if(0.7 <lowPassResults <= 0.84){}else if(0.84 <lowPassResults <= 0.98){}else{}
}// AVAudioRecorder委托事件
- (void)audioRecorderDidFinishRecording(AVAudioRecorder *)recorder successfully:(BOOL)flag
{//录音结束
}
- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error
{//录音编码错误
}
3,AVAudioPlayer的使用
主要用于音频文件的播放,它主要有两个初始化方法:initWithData与initWithContentsOfURL。两个一般都可以使用,但在使用initWithContentsOfURL时要注意传入文件的文件名的格式,稍有不同,则无法播放,如:aac文件,如果后缀名为大写AAC,则无法播放。
// initWithContentsOfURL
NSURL * urlAudio = [NSURL fileURLWithPath:audioPath];
AVAudioPlayer * _player = [[AVAudioPlayer alloc] initWithContentsOfURL:urlAudio error:nil];
// initWithData
NSData * dataAudio = [NSData dataWithContentsOfFile:audioPath];
NSError *error = nil;
AVAudioPlayer *_player = [[AVAudioPlayer alloc] initWithData:dataAudio error:&error];
//属性设置
[_player prepareToPlay]; //准备播放
[_player play]; //播放
[_player pause]; //暂停播放
[_player stop]; //停止播放
_player.duration; //播放持续时间,只读
_player.volume = 0.8; //设置音量大小
_player.currentTime = 15.0; //设置当前播放时间
_player.numberOfLoops = 3; //循环播放时间
_player.delegate = self; //委托事件// AVAudioPlayer委托事件
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{//音频文件播放结束
}
- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{//音频文件解码错误
}
注:录音类AVAudioRecorder最好设置为全局变量。如果为局部变量,当销毁掉时将结束录音
附:据此写出的仿微信录音框架:点击打开链接
IOS AVFoundation的录音与播放相关推荐
- AVFoundation之录音及播放
录音 在开始录音前,要把会话方式设置成AVAudioSessionCategoryPlayAndRecord //设置为播放和录音状态,以便可以在录制完之后播放录音AVAudioSession *se ...
- AVFoundation的录音与播放
1.AVAudioSession的使用 AVAudioSession是一个单例模式.在IOS7以前可以不用设置,在IOS7上不设置AVAudioSession则不可以录音. 1.1设置AVAudioS ...
- Swift实现iOS录音与播放音频功能
Swift实现iOS录音与播放音频功能 作用 AVPLayer:可以用来播放在线及本地音视频 AVAudioSession:音频会话,主要用来管理音频设置与硬件交互 使用时需要导入 #import & ...
- iOS 音频的录制、播放及音频文件管理
文章目录 音频会话 音效播放 音乐播放 音频录制 音频管理 补充:音频队列服务 参考地址 音频会话 在使用Apple设备时,我们注意到有些应用打开音频播放时,其他音频就会终止,而有些应用却可以同时使用 ...
- iPhone的录音和播放
最近准备做一个关于录音和播放的项目!查了一些资料,很简单的做了一个,下面我就分享一下iPhone的录音和播放的使用心得. iPhone的录音和播放使用到了media层的内容,media层处于cocoa ...
- iOS视频——视频文件、播放视频
视频文件 视频文件格式很多: 1.AVI文件,是将音频与视频同步组合在一起的文件格式.有损压缩方式,压缩比较高,画面质量不是太好. 2.WMV文件,同等质量下,体积非常小,适合网上传输与播放.视频传输 ...
- Unity3d 实现录音、播放和保存功能
在场景中创建空节点并添加Audio Source组件.再为其挂载以下脚本,可轻松实现录音.播放和保存功能.可在PC和安卓移动端使用(iOS未作尝试). using UnityEngine; using ...
- iOS Dev (21) 用 AVPlayer 播放一个本地音频文件
iOS Dev (21) 用 AVPlayer 播放一个本地音频文件 作者:CSDN 大锐哥 博客:http://blog.csdn.net/prevention 前言 这篇文章与上一篇极其相似,要注 ...
- IOS后台运行 之 后台播放音乐
IOS后台运行 之 后台播放音乐 iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了.如果音频操作是用苹果官方的AVFoundation.framework实现,像 ...
最新文章
- RoadFlow工作流引擎安装与部署
- java中web应用中重定向与转发的区别
- Nginx负载均衡实现之用户手动选择与DNS轮询
- OSG与opengl的shader结合
- 您必须学习Java 8的函数式编程吗?
- git 常用命令笔记
- 教育部统考 计算机应用,9月教育部统考《计算机应用基础》试卷一附答案.doc
- 贪婪模式与非贪婪模式
- Python+BI爬取3000条车厘子数据,发现了这些秘密
- 跳转系统设置相关界面的方法
- 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割
- 精心收集了60个C语言项目源码,分享给大家
- 我的网址收藏-更新日期(2014-09-04)
- java 微信文章评论点赞_微信文章评论点赞刷赞工具及微信文章评论点赞软件使用教程...
- 局域网屏幕监控软件_掌控局域网监控软件(zklan)
- 文明4 java_文明4主题曲《Baba Yetu》(敬请关注中文歌词部分~)
- 二阶系统级联_IIR数字滤波器的级联型结构中每个二阶级联子系统的系数可多带带控制一对零点或极点,有利于控制系统的频响...
- android转发短信到邮箱,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到邮箱...
- 【Springboot】——@Deprecated
- 关于2-3-4树和红黑树的简单理解
热门文章
- android通知栏快捷设置开发,即添加快捷磁贴指北
- java osgi equinox_OSGI Equinox 环境搭建
- vue slots 透传
- 无限乱斗服务器卡,无限乱斗上线后,“吉格斯商店、卡顿时有发生”
- 近年CVPR和ICCV论文下载
- OC 成员变量和属性的区别 .
- 串口转波形软件SerialPlot的使用
- python正则表达式提取电话号码_利用正则表达式编写python 爬虫,抓取网页电话号码!...
- 鸿蒙中端手机,华为鸿蒙2.0将发布,鸿蒙系统为何先用于中低端手机?
- 麦克斯韦方程组_概述理解_电磁学