@property (readonly, getter=isRecording) BOOL recording;//是否正在录音 @property (readonly) NSDictionary<NSString *, id> *settings;//录音配置 @property (readonly) NSURL *url;//录音文件存放URL @property (readonly) NSTimeInterval currentTime;//录音时长 @property (getter=isMeteringEnabled) BOOL meteringEnabled;//是否监控声波
- (BOOL)prepareToRecord;//为录音准备缓冲区 - (BOOL)record;//录音开始,暂停后调用会恢复录音 - (BOOL)recordAtTime:(NSTimeInterval)time;//在指定时间后开始录音 - (BOOL)recordForDuration:(NSTimeInterval) duration;//按指定时长录音 - (BOOL)recordAtTime:(NSTimeInterval)time forDuration:(NSTimeInterval)duration;//上面2个的合体 - (void)pause; //中断录音 - (void)stop; //停止录音 - (BOOL)deleteRecording;//删除录音,必须先停止录音再删除
//录音完成后调用 - (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag;//录音编码发送错误时调用 - (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error;
#import <AVFoundation/AVFoundation.h>
#define kRecordAudioFile @"myRecord.caf"
@interface ViewController ()<AVAudioRecorderDelegate>
{
NSString *dateName;
}
@property (weak, nonatomic) IBOutlet UITableView *table;
@property (nonatomic,strong) AVAudioRecorder *audioRecorder;//音频录音机
@property (nonatomic,strong) AVAudioPlayer *audioPlayer;//音频播放器,用于播放录音文件
@property(nonatomic,strong) NSMutableArray *spaceData;
@end
@implementation ViewController
#pragma mark - 私有方法
/**
* 设置音频会话
*/
-(void)setAudioSession{
AVAudioSession *audioSession=[AVAudioSession sharedInstance];
//设置为播放和录音状态,以便可以在录制完之后播放录音
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[audioSession setActive:YES error:nil];
}
/**
* 取得录音文件设置
*
* @return 录音设置
*/
-(NSDictionary *)getAudioSetting{
NSMutableDictionary *dicM=[NSMutableDictionary dictionary];
//设置录音格式
[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];
//....其他设置等
return dicM;
}
/**
* 取得录音文件保存路径
*
* @return 录音文件路径
*/
-(NSURL *)getPlayPath:(NSString *)title{
// static int index = 0;
NSString *urlStr=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
urlStr=[urlStr stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",title,kRecordAudioFile]];
NSLog(@"play file path:%@",urlStr);
NSURL *url=[NSURL fileURLWithPath:urlStr];
return url;
}
/**
* 以日期为title,来保存录音
*
* @return <#return value description#>
*/
- (NSString *) convertDateFromString
{
NSDate *date = [NSDate date];
// NSLog(@"%@--askl",date);
//
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//zzz表示时区,zzz可以删除,这样返回的日期字符将不包含时区信息。
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *destDateString = [dateFormatter stringFromDate:date];
return destDateString;
}
- (void)setClikeSpaceState:(NSString *)aState
{
NSLog(@"点击语音---");
if([aState isEqualToString:@"begin"])
{
NSLog(@"begin---");
dateName = [self convertDateFromString];
//创建录音文件保存路径
NSURL *url=[self getPlayPath:dateName];
//创建录音格式设置
NSDictionary *setting=[self getAudioSetting];
//创建录音机
NSError *error=nil;
_audioRecorder=[[AVAudioRecorder alloc]initWithURL:url settings:setting error:&error];
_audioRecorder.delegate=self;
_audioRecorder.meteringEnabled=YES;//如果要监控声波则必须设置为YES
if (![self.audioRecorder isRecording]) {
[self.audioRecorder record];//首次使用应用时如果调用record方法会询问用户是否允许使用麦克风
// self.timer.fireDate=[NSDate distantPast];
NSLog(@"111");
}
}else
{
NSLog(@"end---");
/** 停止录音*/
[self.audioRecorder stop];
/** 录音地址*/
NSURL *url = [self getPlayPath:dateName];
/** 加载数据*/
AVAudioPlayer *audioPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
Model *model = [[Model alloc]init];
model.duration = [NSString stringWithFormat:@"%.f",audioPlayer1.duration];
model.spacePath = dateName;
/** table 刷新*/
[self.spaceData addObject:model];
[self.table reloadData];
/** table 滚动到当前row*/
[self.table selectRowAtIndexPath:[NSIndexPath indexPathForRow:(self.spaceData.count - 1) inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
Model *model = self.spaceData[indexPath.row];
/** 播放录音*/
NSURL *url=[self getPlayPath:model.spacePath];
NSError *error=nil;
_audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
_audioPlayer.numberOfLoops=0;
[_audioPlayer prepareToPlay];
[self.audioPlayer play];
NSLog(@"%.0f---aaaa",_audioPlayer.duration);
/** UIImage动画数组*/
NSMutableArray *imgData = [NSMutableArray array];
for(int i=0;i<4;i++)
{
UIImage *aImage = [UIImage imageNamed:[NSString stringWithFormat:@"chat_receiver_audio_playing00%d",i]];
[imgData addObject:aImage];
}
TwoTableViewCell *twoCell = [self.table cellForRowAtIndexPath:indexPath];
/** 点击动画*/
[twoCell.speak setAnimationImages:imgData];
// [twoCell.speak setAnimationRepeatCount:1];
[twoCell.speak setAnimationDuration:1];
[twoCell.speak startAnimating];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)([model.duration intValue] * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[twoCell.speak stopAnimating];
});
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有