AVFoundation之录音及播放
录音
在开始录音前,要把会话方式设置成AVAudioSessionCategoryPlayAndRecord
//设置为播放和录音状态,以便可以在录制完之后播放录音
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&setCategoryError];
NSError *activationError = nil;
[session setActive:YES error:&activationError];
创建AVAudioRecorder
给出录音存放的地址,录音的设置等
//录音存放位置
-(NSURL *) getRecordAudioPath{
NSString *urlStr=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//#define kRecordAudioFile @"myRecord.caf"
urlStr=[urlStr stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.caf",[[NSUUID UUID]UUIDString]]];
NSLog(@"save file path at:%@",urlStr);
NSURL *url=[NSURL fileURLWithPath:urlStr];
return url;
}
- (void) startRecord{
if (recorder.isRecording) {
return;
}
recorderUrl = [self getRecordAudioPath];
NSError *err =nil;
NSMutableDictionary *dicM=[NSMutableDictionary dictionary];
// [dicM setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey];
//设置录音格式
[dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];
//设置录音采样率,8000是电话采样率,对于一般录音已经够了
[dicM setObject:@(8000) forKey:AVSampleRateKey];
//设置通道,这里采用单声道
[dicM setObject:@(1) forKey:AVNumberOfChannelsKey];
//每个采样点位数,分为8、16、24、32
[dicM setObject:@(8) forKey:AVLinearPCMBitDepthKey];
//是否使用浮点数采样
[dicM setObject:@(YES) forKey:AVLinearPCMIsFloatKey];
recorder = [[AVAudioRecorder alloc]initWithURL:recorderUrl settings:dicM error:&err];
recorder.delegate = self;
////如果要监控声波则必须设置为YES
recorder.meteringEnabled = YES;
[recorder updateMeters];
if (err) {
NSLog(@"创建录音机对象时发生错误,错误信息:%@",err.localizedDescription);
recorder = nil;
return ;
}
[recorder prepareToRecord];
[recorder record];
}
录制暂停
//暂停录音,且可以继续录音
[recorder pause];
//[recorder record];
录制结束
//录制结束,录音文件关闭,会执行代理方法audioRecorderDidFinishRecording/* stops recording. closes the file. */
[recorder stop];
代理方法
pragma mark — AVAudioRecorderDelegate
-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
NSLog(@”录音完成!”);
}
-(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder )recorder error:(NSError )error
{
NSLog(@”录音出错!”);
}
播放录音
创建AVAudioPlayer,AVAudioPlayer播放本地音频。
NSError *err =nil;
player = [[AVAudioPlayer alloc]initWithContentsOfURL:recorderUrl error:&err];
player.delegate = self;
//设置音乐播放次数 -1为一直循环
player.numberOfLoops = 0;
//开启仪表计数功能
player.meteringEnabled = YES;
[player updateMeters];
// player.enableRate = YES;
//设置左右声道 left:-1,center:0.0,right =1;
player.pan = 0.0;
//设置音量,其值0.0~1.0
player.volume = 0.6;
[player prepareToPlay];
[player play];
播放代理AVAudioPlayerDelegate
#pragma mark- AVAudioPlayerDelegate
-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
NSLog(@"player 播放失败%@",error);
}
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
NSLog(@"player:%@ 播放完成%d",player,flag);
// //根据实际情况播放完成可以将会话关闭,其他音频应用继续播放
// [[AVAudioSession sharedInstance]setActive:NO error:nil];
AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
playBtn.selected = NO;
}
AVFoundation之录音及播放的更多相关文章
- IOS关于录音,播放实现总结
//音频录制(标准过程5,9更新) 准备:导入AVFoundation框架及头文件 1 设置会话类型,允许播放及录音AVAudioSession *audioSession = [AVAudioSes ...
- iOS 实时录音和播放
需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之 ...
- 李洪强iOS开发之录音和播放实现
李洪强iOS开发之录音和播放实现 //首先导入框架后,导入头文件.以下内容为托控件,在storyboard中拖出两个按钮为录音和播放按钮 //创建一个UIViewController在.h文件中写 # ...
- Swift实现iOS录音与播放音频功能
作用AVPLayer:可以用来播放在线及本地音视频AVAudioSession:音频会话,主要用来管理音频设置与硬件交互使用时需要导入 #import <AVFoundation/AVFound ...
- Android开发教程 录音和播放
首先要了解andriod开发中andriod多媒体框架包含了什么,它包含了获取和编码多种音频格式的支持,因此你几耍轻松把音频合并到你的应用中,若设备支持,使用MediaRecorder APIs便可以 ...
- Android平台下实现录音及播放录音功能的简介
录音及播放的方法如下: package com.example.audiorecord; import java.io.File; import java.io.IOException; import ...
- windows phone 7 通过麦克风录音,并且播放
原文:windows phone 7 通过麦克风录音,并且播放 //模拟XNA的框架(凡是在wp7中应用xna的都必须先模拟此类) public class XNAAsyncDispatcher : ...
- Android 实时录音和回放,边录音边播放 (KTV回音效果)
上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解一下如何一边录音一边播放.使用AndioRecord录音和使用AudioTrac ...
- Android 录音和播放
今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以了解了一些有关录音和播放的知识.接到这个任务的第一反应就是看看Andro ...
随机推荐
- xenserver 模板导出导入
由于业务需求,新增一台xenserver,需要将原先创建好的模板环境导入到新的母机上面,此处记录一下 1.导出模板 # 获取需要导出的模板uuid [root@localhost ~]# xe tem ...
- django项目部署在Apache服务器中,静态文件路径的注意点
django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...
- linux虚拟机能ping通windows主机,windows主机ping不通linux虚拟机的解决办法
分三步: 1.虚拟机网络连接方式选择Nat
- 修改Linux的基本配置(修改主机名修改ip地址安装JDK/Tomcat/MySQL等等)
(一)基本操作修改 修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=server1.itcast.cn 修改ip地址 vi /etc/s ...
- attention机制七搞八搞
注意力机制即Attention mechanism在序列学习任务上具有巨大的提升作用,在编解码器框架内,通过在编码段加入A模型,对源数据序列进行数据加权变换,或者在解码端引入A模型,对目标数据进行加权 ...
- 如何删除github中的仓库?
使用Github管理项目确实有些好处,但删除仓库(repositories)确实不太好找到. 首先进入要删除的仓库,点击右下角的“settings” 然后拉到页面最下面在danger zone 按“d ...
- Shell Script Notes
shell Script学习笔记 <鸟哥的Linux私房菜 3rd Edition>: @1:若变量内容中包含空格字符,则可使用双引号"或单引号'将变量内容结合起来,但不同的是: ...
- linux中获取系统时间的几种方法
asctime(将时间和日期以字符串格式表示) 相关函数 time,ctime,gmtime,localtime 表头文件 #include<time.h> 定义函数 char * asc ...
- classmethod
描述 classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等. 语法 classmeth ...
- HDF及HDF-EOS数据格式简介
HDF-EOS数据格式介绍 HDF(Hierarchy Data Format )数据格式是美国伊利诺伊大学国家超级计算应用中心(NCSA ,National Central for Super co ...