#pragma mark -  设置录制的音频文件的位置
- (NSString *)audioRecordingPath{
NSString *str_date=[TimeTransform DateToStringWithFormat:[NSDate date] withFormatString:@"yyyyMMDDHHmmss"];
AvdioName=str_date;
NSString *result = nil;
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsFolde = [folders objectAtIndex:0];
result = [documentsFolde stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.aac",str_date]];
return (result);
} #pragma mark -根据文件名获取文件路径
-(NSString *)getRecordingPathWithName:(NSString *)name{
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsFolde = [folders objectAtIndex:0];
NSString *result = nil;
result = [documentsFolde stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.aac",name]];
return result;
} #pragma mark -录音按钮
-(void)SoundAction:(UILongPressGestureRecognizer *)gestureRecognizer{ if (gestureRecognizer.state==UIGestureRecognizerStateBegan) {
NSLog(@"UIGestureRecognizerStateBegan"); //按下录音
if ([self canRecord]) { NSError *error = nil;
//必须真机上测试,模拟器上可能会崩溃
recorder = [[AVAudioRecorder alloc] initWithURL:[NSURL URLWithString:[self audioRecordingPath]] settings:recorderSettingsDict error:&error]; if (recorder) {
recorder.meteringEnabled = YES;
[recorder prepareToRecord];
[recorder record]; //启动定时器
timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(levelTimer:) userInfo:nil repeats:YES];
NSLog(@"录制声音开始!"); [self performSelector:@selector(stopRecordingOnAudioRecorder:)
withObject:recorder
afterDelay:10.0f];
[view_black_bg setHidden:false];
} else
{
int errorCode = CFSwapInt32HostToBig ([error code]);
NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode); }
} }else if (gestureRecognizer.state==UIGestureRecognizerStateEnded){
NSLog(@"UIGestureRecognizerStateEnded");
[lb_audio_title setText:AvdioName];
[self stopRecordingOnAudioRecorder:recorder];
[timer invalidate];
[view_black_bg setHidden:YES];
}
} -(void)levelTimer:(NSTimer*)timer_
{
//call to refresh meter values刷新平均和峰值功率,此计数是以对数刻度计量的,-160表示完全安静,0表示最大输入值
[recorder updateMeters];
const double ALPHAa = 0.05;
double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
lowPassResults = ALPHAa * peakPowerForChannel + (1.0 - ALPHAa) * lowPassResults; NSLog(@"Average input: %f Peak input: %f Low pass results: %f", [recorder averagePowerForChannel:0], [recorder peakPowerForChannel:0], lowPassResults); // if (lowPassResults>=0.8) {
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:7]];
// }else if(lowPassResults>=0.7){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:6]];
// }else if(lowPassResults>=0.6){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:5]];
// }else if(lowPassResults>=0.5){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:4]];
// }else if(lowPassResults>=0.4){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:3]];
// }else if(lowPassResults>=0.3){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:2]];
// }else if(lowPassResults>=0.2){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:1]];
// }else if(lowPassResults>=0.1){
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:0]];
// }else{
// soundLodingImageView.image = [UIImage imageNamed:[volumImages objectAtIndex:0]];
// } } //判断是否允许使用麦克风7.0新增的方法requestRecordPermission
-(BOOL)canRecord
{
__block BOOL bCanRecord = YES;
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
[audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
if (granted) {
bCanRecord = YES;
}
else {
bCanRecord = NO;
dispatch_async(dispatch_get_main_queue(), ^{
[[[UIAlertView alloc] initWithTitle:nil
message:@"app需要访问您的麦克风。\n请启用麦克风-设置/隐私/麦克风"
delegate:nil
cancelButtonTitle:@"关闭"
otherButtonTitles:nil] show];
});
}
}];
}
} return bCanRecord;
} #pragma mark -停止音频的录制
- (void)stopRecordingOnAudioRecorder:(AVAudioRecorder *)record{ [recorder stop];
recorder=nil; //结束定时器
[timer invalidate];
timer = nil;
}
/**
* 录音完成,录音完成后播放录音
*
* @param recorder 录音机对象
* @param flag 是否成功
*/
-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{ }

AVAudioRecorder、AVAudioPlayer录音及播放的更多相关文章

  1. Domain=NSOSStatusErrorDomain Code=1937337955 关于iOS录音AVAudioRecorder与音频播放AVAudioPlayer真机调试录音不能播放的问题

    error:Domain=NSOSStatusErrorDomain Code=1937337955 ,这个错误很常见, 原因是因为我们需要调用另外一个AVAudioPlayer 的初始化方法,来确定 ...

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

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

  3. AVFoundation之录音及播放

    录音 在开始录音前,要把会话方式设置成AVAudioSessionCategoryPlayAndRecord //设置为播放和录音状态,以便可以在录制完之后播放录音 AVAudioSession *s ...

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

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

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

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

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

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

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

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

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

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

  9. iOS 实时录音和播放

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

随机推荐

  1. Jquery attr()方法 属性赋值和属性获取

    jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1. attr(属性名 ...

  2. 过虑器 ThreadLocal 权限 监听器 观察者模式

    数据的压缩 GzipOutputStream - > > ByteArrayOutputStream. 以下是在某个servlet中对指定的数据进行压缩 package cn.itcast ...

  3. Android开发之读写联系人

    读写联系人需要用到android的ContentProvider 同时需要读和写联系人的权限 需要使用到联系人数据库中的 * raw_contacts表: * contact_id:联系人id * d ...

  4. bzoj1044

    好题 第一问不难,毕竟二分答案类的题目在USACO上都练了好多遍了 第二问充分的暴露了我dp渣的本性 一开始楞是没想出来 f[i,j]表示到第i根木棒切了j刀满足最长段小于等于ans的方案数 式子是这 ...

  5. [转] Splay Tree(伸展树)

    好久没写过了,比赛的时候就调了一个小时,差点悲剧,重新复习一下,觉得这个写的很不错.转自:here Splay Tree(伸展树) 二叉查找树(Binary Search Tree)能够支持多种动态集 ...

  6. Dubbo实例

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  7. apache开源项目--Mahout

    Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可 ...

  8. Oracle 10g DataGuard手记之基础配置

    DataGuard为企业数据的高可用性,数据安全以及灾难恢复提供支持,一般由一个primary db与几个物理或逻辑standby db组成一个DataGuard配置. 系统环境 操作系统为windo ...

  9. Swift数组的加法运算符用法:array1 += array2

    var stringList1 = [String]() //创建String类型空数组 var stringList2 = ["1", "3", " ...

  10. 【打包成exe安装包文件发布你的程序】使用QT联系人管理系统的例子

    [前言]在 QT数据库使用案列[联系人]-- 使用sqlite和QStringListModel 中,我们写了这个程序,如何将它打包成安装文件发给其他小伙伴呢? 我们使用 nsis-2.46-setu ...