录音

在开始录音前,要把会话方式设置成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之录音及播放的更多相关文章

  1. IOS关于录音,播放实现总结

    //音频录制(标准过程5,9更新) 准备:导入AVFoundation框架及头文件 1 设置会话类型,允许播放及录音AVAudioSession *audioSession = [AVAudioSes ...

  2. iOS 实时录音和播放

    需求:最近公司需要做一个楼宇对讲的功能:门口机(连接WIFI)拨号对室内机(对应的WIFI)的设备进行呼叫,室内机收到呼叫之后将对收到的数据进行UDP广播的转发,手机(连接对应的WIFI)收到视频流之 ...

  3. 李洪强iOS开发之录音和播放实现

    李洪强iOS开发之录音和播放实现 //首先导入框架后,导入头文件.以下内容为托控件,在storyboard中拖出两个按钮为录音和播放按钮 //创建一个UIViewController在.h文件中写 # ...

  4. Swift实现iOS录音与播放音频功能

    作用AVPLayer:可以用来播放在线及本地音视频AVAudioSession:音频会话,主要用来管理音频设置与硬件交互使用时需要导入 #import <AVFoundation/AVFound ...

  5. Android开发教程 录音和播放

    首先要了解andriod开发中andriod多媒体框架包含了什么,它包含了获取和编码多种音频格式的支持,因此你几耍轻松把音频合并到你的应用中,若设备支持,使用MediaRecorder APIs便可以 ...

  6. Android平台下实现录音及播放录音功能的简介

    录音及播放的方法如下: package com.example.audiorecord; import java.io.File; import java.io.IOException; import ...

  7. windows phone 7 通过麦克风录音,并且播放

    原文:windows phone 7 通过麦克风录音,并且播放 //模拟XNA的框架(凡是在wp7中应用xna的都必须先模拟此类) public class XNAAsyncDispatcher : ...

  8. Android 实时录音和回放,边录音边播放 (KTV回音效果)

    上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解一下如何一边录音一边播放.使用AndioRecord录音和使用AudioTrac ...

  9. Android 录音和播放

    今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以了解了一些有关录音和播放的知识.接到这个任务的第一反应就是看看Andro ...

随机推荐

  1. 常用的数据库sql语句

    create table query_audit_log(Time varchar(255) default null,Id int(10) default null, Command varchar ...

  2. 整理前端css/js/jq常见问题及解决方法(1)

    1. 兼容ie8圆角的解决方法:下载ie-css3.htc文件在css中加入behavior:url(ie-css3.htc);z-index:3; position:relative 即可 2. 去 ...

  3. [置顶] 我的Android进阶之旅------>Android解决异常: startRecording() called on an uninitialized AudioRecord.

    今天使用AudioRecord进行录音操作时候,报了下面的异常. E/AndroidRuntime(22775): java.lang.IllegalStateException: startReco ...

  4. java 抽象类实现接口

    1.抽象类肯定可以实现接口:  2.这不是有没有意义的事情,是一种思想,当你自己写的类想用接口中个别方法的时候(注意不是所有的方法),那么你就可以用一个抽象类先实现这个接口(方法体中为空),然后再用你 ...

  5. node.js及node-inspector的调试方法

    1.先运行 $ node --debug-brk test.js 2.再在新的窗口运行: $ node-inspector 3.再打开Chrome浏览器输入node-inspector提示的地址,就会 ...

  6. LeetCode:为运算表达式设置优先级【241】

    LeetCode:为运算表达式设置优先级[241] 题目描述 给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果.你需要给出所有可能的组合的结果.有效的运算符号包含  ...

  7. Ubuntu环境变量配置

    根目录下的.bashrc文件中配置环境变量 export JAVA_HOME=/home/zn/softpackage/jdk1. export CLASSPATH=${JAVA_HOME}/lib ...

  8. Kattis - register 【水】

    题意 就是 有一堆容器,然后可以执行加的操作,每个容量是 2, 3, 5, 7, 11, 13, 17, 19 然后 有进位 比如第一个 容器,到2了,就会重置为0,然后 下一个容器+ 1, 但是要保 ...

  9. Linux虚拟内存管理(glibc)

    转:https://blog.csdn.net/tengxy_cloud/article/details/53067396 https://www.cnblogs.com/purpleraintear ...

  10. Python编程-异常处理

    一.错误和异常 1.程序中难免出现错误,而错误分成两种 (1)语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def t ...