录音

在开始录音前,要把会话方式设置成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. 坑爹的 HTTPClient java.lang.NoSuchFieldError: INSTANCE

    项目中需要用到httpclient ,maven配置如下 <dependency> <groupId>org.apache.httpcomponents</groupId ...

  2. oracle 查看表是否被锁

    --以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...

  3. 对django模型中的objects的理解

    object是模型属性,用于模型对象和数据库交互. object=Manager()是管理器类型的对象,是model和数据库进行查询的接口 可以自定义管理对象 books=models.Manager ...

  4. TFS二次开发-基线文件管理器(3)-源码文件的读取

    TFS登录成功后,就可以开始读取源码目录树了. 一般来说,我不建议将整个树全部读取出来,因为这里不光存有项目文件,还有项目源码.如果全部读取出会是非常大的一棵树.因此我建议只读出根目录,每一次点击打开 ...

  5. 2014 MapReduce

    function map(String name, String document): // name: document name // document: document contents fo ...

  6. 【转】通过VIOS实现AIX系统的网络虚拟化

    在上一篇博文中,我们已经在一个新创建的LPAR中通过File-backed device以及VMLibrary的方式成功安装了一个AIX系统,接下来我们讨论如何通过VIOS的协助来完成新装AIX系统的 ...

  7. ArcGIS Server Q&A

    持续更新.. 一. AGS Server10发布mobile data access 出现错误 问题描述: "ArcGIS Server: Configuration <name> ...

  8. 高德地图API使用

    1.根据地址找经纬度/修改经纬度 marker.setPosition(result.geocodes[0].location); map.setCenter(marker.getPosition() ...

  9. do while 宏定义如何使用?

    #define verification(lhs,rhs,str) do { \ if (lhs == rhs) { \ std::cout << rang::style::bold &l ...

  10. TGraphicControl(自绘就2步,直接自绘自己,不需要调用VCL框架提供的函数重绘所有子控件,也不需要自己来提供PaintWindow函数让管理框架来调用)与TControl关键属性方法速记(Repaint要求父控件执行详细代码来重绘自己,还是直接要求Invalidate无效后Update刷新父控件,就看透明不透明这个属性,因为计算显示的区域有所不同)

    TGraphicControl = class(TControl) private FCanvas: TCanvas; procedure WMPaint(var Message: TWMPaint) ...