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 ...
随机推荐
- 常用的数据库sql语句
create table query_audit_log(Time varchar(255) default null,Id int(10) default null, Command varchar ...
- 整理前端css/js/jq常见问题及解决方法(1)
1. 兼容ie8圆角的解决方法:下载ie-css3.htc文件在css中加入behavior:url(ie-css3.htc);z-index:3; position:relative 即可 2. 去 ...
- [置顶] 我的Android进阶之旅------>Android解决异常: startRecording() called on an uninitialized AudioRecord.
今天使用AudioRecord进行录音操作时候,报了下面的异常. E/AndroidRuntime(22775): java.lang.IllegalStateException: startReco ...
- java 抽象类实现接口
1.抽象类肯定可以实现接口: 2.这不是有没有意义的事情,是一种思想,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你 ...
- node.js及node-inspector的调试方法
1.先运行 $ node --debug-brk test.js 2.再在新的窗口运行: $ node-inspector 3.再打开Chrome浏览器输入node-inspector提示的地址,就会 ...
- LeetCode:为运算表达式设置优先级【241】
LeetCode:为运算表达式设置优先级[241] 题目描述 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含 ...
- Ubuntu环境变量配置
根目录下的.bashrc文件中配置环境变量 export JAVA_HOME=/home/zn/softpackage/jdk1. export CLASSPATH=${JAVA_HOME}/lib ...
- Kattis - register 【水】
题意 就是 有一堆容器,然后可以执行加的操作,每个容量是 2, 3, 5, 7, 11, 13, 17, 19 然后 有进位 比如第一个 容器,到2了,就会重置为0,然后 下一个容器+ 1, 但是要保 ...
- Linux虚拟内存管理(glibc)
转:https://blog.csdn.net/tengxy_cloud/article/details/53067396 https://www.cnblogs.com/purpleraintear ...
- Python编程-异常处理
一.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def t ...