使用EZAudio

录M4A格式可以参考该库例子中的代码.

录wav格式得改下源码.看下面的代码

  AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (error) NSLog(@"audio session category error: %@", error);
[session setActive:YES error:&error];
if (error) NSLog(@"audio session active error: %@", error); self.microphone = [EZMicrophone microphoneWithDelegate:self];
self.recorder = [EZRecorder recorderWithURL:[NSURL fileURLWithPath:RECORD_PATH]
clientFormat:[self.microphone audioStreamBasicDescription]
fileType:EZRecorderFileTypeWAV // 指定为WAV格式
delegate:self]; [self.microphone startFetchingAudio];
self.recording = YES;
self.audioTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(audioTimer:)
userInfo:nil repeats:YES]; // 定时器计算录音时间
- (void)audioTimer:(NSTimer *)timer
{
self.audioV.audioTime = (int)self.recorder.currentTime;
} // 这是个代理函数 可以用来计算音量
- (void)microphone:(EZMicrophone *)microphone
hasAudioReceived:(float **)buffer
withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels
{
dispatch_async(dispatch_get_main_queue(), ^{
if (self.isRecording) {
CGFloat vol = [EZAudioUtilities RMS:buffer[] length:bufferSize];
//vol就是音量 *150是因为放大后控制控件宽度
self.audioV.vol = (int)(vol * );
}
});
}

以上这种写法会闪退.原因是这个库录wav格式配置不对.

修改库中EZAudioUtilities.m文件第287行函数为

 + (AudioStreamBasicDescription)stereoFloatInterleavedFormatWithSampleRate:(float)sampleRate
{
#if 0 // 这个库本身的代码 录wav格式直接出错 闪退
AudioStreamBasicDescription asbd;
UInt32 floatByteSize = sizeof(float);
asbd.mChannelsPerFrame = ;
asbd.mBitsPerChannel = * floatByteSize;
asbd.mBytesPerFrame = asbd.mChannelsPerFrame * floatByteSize;
asbd.mFramesPerPacket = ;
asbd.mBytesPerPacket = asbd.mFramesPerPacket * asbd.mBytesPerFrame;
asbd.mFormatFlags = kAudioFormatFlagIsFloat;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mSampleRate = sampleRate;
asbd.mReserved = ;
return asbd;
#endif // 改用这种配置录出来就是wav格式
AudioStreamBasicDescription asbd;
memset(&asbd, , sizeof(asbd));
asbd.mSampleRate = ; //采样率
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
asbd.mChannelsPerFrame = ; //单声道
asbd.mFramesPerPacket = ; //每一个packet一侦数据
asbd.mBitsPerChannel = ; //每个采样点16bit量化
asbd.mBytesPerFrame = (asbd.mBitsPerChannel / ) * asbd.mChannelsPerFrame;
asbd.mBytesPerPacket = asbd.mBytesPerFrame ; return asbd;
}

使用EncodeAudio库转为amr格式

提取密码: prdq

//转成amr格式后发送 NSData * data = [[NSData alloc] initWithContentsOfFile:RECORD_PATH]; data = [EncodeAudio convertWavToAmrFile:data];

iOS 使用EZAudio库生成wav出错的情况的更多相关文章

  1. iOS中静态库-.a文件生成和使用

    最近在使用使用一个网上的Demo的时候. 出现另一令人烦恼的问题 . 就是它里面有嵌套的工程. 如下图所示. 工程里面还嵌套有一个工程. 真的是让人煞费苦心 …其实这个问题看起来并不是很难, 如果是一 ...

  2. iOS 静态库生成(引用第三方SDK、开源库、资源包)

    一.静态库创建 打开Xcode, 选择File ----> New ---> Project  选择iOS ----> Framework & Library ---> ...

  3. IOS常用第三方库《转》

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  4. iOS常用第三方库大全,史上最全第三方库收集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  5. JHChart 1.1.0 iOS图表工具库中文ReadMe

    JHChart(最新版本1.1.0) 好吧,的确当前的github上已经存有不少的iOS图表工具库,然而,当公司的项目需要图表时,几乎没有哪个第三方能够完全满足我的项目需求.无奈之下,本人不得不花费一 ...

  6. WWDC2014之iOS使用动态库 framework【转】

    from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...

  7. Linux下静态库生成和使用

    Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...

  8. WWDC2014之iOS使用动态库

    苹果的开放态度 WWDC2014上发布的Xcode6 beta版有了不少更新,其中令我惊讶的一个是苹果在iOS上开放了动态库,在Xcode6 Beta版的更新文档中是这样描述的: Frameworks ...

  9. xcode6制作IOS .a静态库小记

    xcode6制作IOS .a静态库小记 创建iOS静态库 简单写个打印的代码 编码完成之后,直接Run就能成功生成.a文件了,选择 xCode->Window->Organizer-> ...

随机推荐

  1. JAVA笔试题集(一)--JAVASE部分

    红色答案为参考答案 1.从下列选项中选择正确的Java表达式(多选) A.  int k=new String("aa");       B.  String str=String ...

  2. ThinkPHP5 与 ThinkPHP3.* 之间的使用差异

    因为研究TP5时间不是很长,暂时先列以下几处差异: 1.过去的单字母函数已完全被替换掉,如下: S=>cache,C=>config,M/D=>model,U=>url,I=& ...

  3. maven报错非法字符:\65279 错误

    开发中一个项目很早就报这个错,maven报错非法字符:\65279 错误,今天终于忍无可忍要解决它 :编译java文件的时候,有些java文件报非法字符 \65279错误,在网上找和很多 方法,也试了 ...

  4. Public key for mysql....rpm is not installed

    解决方案: 此时导入rpm的签名信息即可,用root登录,执行下面命令(我的linux版本是centos 5.1) 原文地址: http://my.oschina.net/u/555639/blog/ ...

  5. DataTable的数据批量写入数据库

    最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.upda ...

  6. 实现textarea高度自适应内容,无滚动条

    最近接触到一个很好用的js插件,可以实现textarea高度随内容增多而改变,并且不显示滚动条,推荐给大家: http://www.jacklmoore.com/autosize/

  7. Node.js 框架

    Node.js的是一个JavaScript平台,它允许你建立大型的Web应用程序.  Node.js的框架平台使用JavaScript作为它的脚本语言来构建可伸缩的应用. 当涉及到Web应用程序的开发 ...

  8. SQL Server 事件通知(Event notifications)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) 事件通知监控DDL(NotifyQue ...

  9. SQL Server2016 新功能实时查询统计信息

    SQL Server2016 新功能实时查询统计信息 很多时候有这样的场景,开发抱怨DBA没有调优好数据库,DBA抱怨开发写的程序代码差,因此,DBA和开发都成为了死对头,无法真正排查问题. DBA只 ...

  10. CYQ.Data V4系列全面开源(2013-08-04)

    致各位.NET开发者: 考虑到本人开源作品太多,个人维护力度有限,故自2013-08-04开始,开放原本需要授权使用的V4系列的最高版本V4.55的框架源码,同时也开放相对应的辅助工具源码,自此,V4 ...