AVAudioRecorder录音和AVAudioPlayer播放
来源:互联网 发布:c语言void什么意思 编辑:程序博客网 时间:2024/04/27 06:54
#import "RecorderViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface RecorderViewController ()<AVAudioRecorderDelegate, AVAudioPlayerDelegate>
@property(nonatomic, retain) AVAudioRecorder *L_AVAudio;
@property(nonatomic, retain) AVAudioPlayer *player;
@property(nonatomic, retain) UIImageView *imageview;
@property(nonatomic, retain) UIView *voView;
@property(nonatomic, retain) UIView *backView;
@property(nonatomic, retain) NSTimer *timer;//录音声波监控(注意这里暂时不对播放进行监控)
@property(nonatomic, retain) UIProgressView *audioPower;//音频波动
@property(nonatomic, retain) UIWebView *webView;
@property(nonatomic, assign) BOOL isRecorder;
@end
@implementation RecorderViewController
- (void)dealloc
{
[_L_AVAudio release];
[_player release];
[_imageview release];
[_voView release];
[_backView release];
[_timer release];
[_audioPower release];
[_webView release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.isRecorder = NO;
#pragma mark 创建标题
[self createTitle];
#pragma mark 创建页面
[self createView];
#pragma mark 创建Recorder
[self createRecorder];
}
-(void)createTitle
{
self.imageview = [[UIImageView alloc]init];
UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"backImage.jpg"]];
image.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + 20);
[self.view addSubview:image];
[image release];
self.view.backgroundColor = [UIColor colorWithRed:0.614 green:0.508 blue:1.000 alpha:1.000];
self.title = @"录音&播放";
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica-Bold" size:22],
NSForegroundColorAttributeName:[UIColor purpleColor]}];
}
-(void)createView
{
NSArray *array = @[@"开始录制", @"停止录制", @"暂停录制", @"开始播放", @"停止播放"];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
if (i == 1) {
btn.frame = CGRectMake(70 + j * 135, 450 + i * 70, 100, 50);
}
else
{
btn.frame = CGRectMake(20 + j * 115, 430 + i * 70, 100, 50);
}
if (i == 1 && j == 2) {
}
else
{
[btn setTitle:array[i * 3 + j] forState:UIControlStateNormal];
}
btn.layer.cornerRadius = 5;
[btn setTitleColor:[UIColor purpleColor] forState:UIControlStateNormal];
[self.view addSubview:btn];
btn.tag = 8000 + i * 3 + j;
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
}
}
}
-(void)btnAction:(UIButton *)btn
{
if (btn.tag == 8000) {
[self.L_AVAudio record]; //开始录音
[self createBeginView];
// NSLog(@"========%f", self.audioPower.progress);
self.timer.fireDate = [NSDate distantPast]; //开始定时器
self.isRecorder = YES;
}
else if (btn.tag == 8001)
{
[self.L_AVAudio stop]; //停止录音
self.timer.fireDate=[NSDate distantFuture]; //关闭定时器
self.audioPower.progress = 0.0;
}
else if (btn.tag == 8002)
{
[self.L_AVAudio pause]; //暂停录音 (0.25)
self.timer.fireDate=[NSDate distantFuture];
// NSLog(@"%@", self.timer.fireDate);
}
else if (btn.tag == 8003)
{
if (self.isRecorder) {
//开始播放
NSString *path = [[NSString alloc] initWithFormat:@"%@/%@", NSTemporaryDirectory(), @"test"];
NSLog(@"%@", path);
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
self.player.delegate = self;
[self.player prepareToPlay];
[self.player play];
// 设定位置和大小
CGRect frame = CGRectMake(80,130,0,0);
frame.size = [UIImage imageNamed:@"u=3572879117,3580921531&fm=21&gp=0.jpg.gif"].size;
// 读取gif图片数据
NSData *gif = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"u=3572879117,3580921531&fm=21&gp=0.jpg" ofType:@"gif"]];
// view生成
self.webView = [[UIWebView alloc] initWithFrame:frame];
self.webView.userInteractionEnabled = NO;//用户不可交互
[self.webView loadData:gif MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];
[self.view addSubview:self.webView];
[self.webView release];
}
}
else
{
if (self.isRecorder) {
[self.player stop]; //停止播放
self.webView.hidden = YES;
self.backView.hidden = YES;
self.voView.hidden = YES;
self.imageview.image = [UIImage imageNamed:@"playStop"];
}
}
}
-(void)createBeginView
{
self.imageview.image = [UIImage imageNamed:@"beginrecording"];
self.imageview.frame = CGRectMake(80,130,220,220);
[self.view addSubview:self.imageview];
self.backView = [[UIView alloc]initWithFrame:CGRectMake(140, 325, 110, 10)];
self.backView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.backView];
self.voView = [[UIView alloc]init];
self.voView.backgroundColor = [UIColor purpleColor];
[self.view addSubview:self.voView];
}
//录音声波监控定制器
-(NSTimer *)timer{
if (!_timer) {
_timer=[NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(audioPowerChange) userInfo:nil repeats:YES];
}
return _timer;
}
-(void)audioPowerChange{
[self.L_AVAudio updateMeters];//更新测量值
float power= [self.L_AVAudio averagePowerForChannel:0];//取得第一个通道的音频,注意音频强度范围时-160到0
CGFloat progress=(1.0 / 160.0) * (power + 160.0);
NSLog(@"%f", progress);
self.voView.frame = CGRectMake(140, 325, progress * 100, 10);
[self.audioPower setProgress:progress];
}
-(void)createRecorder
{
//AVAudioSession是用来控制audio会话的,控制其是用来录音还是播放等等功能
//标明此次会话是录音+播放
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
//配置recoder
NSError *error = nil;
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
//设置录音格式
[settings setObject:[NSNumber numberWithInt:
kAudioFormatiLBC] forKey:AVFormatIDKey];
//设置录音采样率,8000是电话采样率,对于一般录音已经够了
[settings setObject:[NSNumber numberWithFloat:8000] forKey:AVSampleRateKey];
//设置通道 单通道
[settings setObject:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
//设置采样点位数:8 16 24 32
[settings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
// [settings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
//是否使用浮点数采样
[settings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
//录音文件保存地址
NSString *path = [[NSString alloc] initWithFormat:@"%@/%@", NSTemporaryDirectory(), @"test"];
self.L_AVAudio = [[AVAudioRecorder alloc] initWithURL:[NSURL URLWithString:path] settings:settings error:&error];
self.L_AVAudio.delegate = self;
//配置号recoder并且创建录音文件
if ([self.L_AVAudio prepareToRecord]) {
NSLog(@"Prepare successful");
}
else
{
NSLog(@"Prepare fail");
}
self.L_AVAudio.meteringEnabled=YES;//如果要监控声波则必须设置为YES
}
-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
[[AVAudioSession sharedInstance] setActive:NO error:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#import <AVFoundation/AVFoundation.h>
@interface RecorderViewController ()<AVAudioRecorderDelegate, AVAudioPlayerDelegate>
@property(nonatomic, retain) AVAudioRecorder *L_AVAudio;
@property(nonatomic, retain) AVAudioPlayer *player;
@property(nonatomic, retain) UIImageView *imageview;
@property(nonatomic, retain) UIView *voView;
@property(nonatomic, retain) UIView *backView;
@property(nonatomic, retain) NSTimer *timer;//录音声波监控(注意这里暂时不对播放进行监控)
@property(nonatomic, retain) UIProgressView *audioPower;//音频波动
@property(nonatomic, retain) UIWebView *webView;
@property(nonatomic, assign) BOOL isRecorder;
@end
@implementation RecorderViewController
- (void)dealloc
{
[_L_AVAudio release];
[_player release];
[_imageview release];
[_voView release];
[_backView release];
[_timer release];
[_audioPower release];
[_webView release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.isRecorder = NO;
#pragma mark 创建标题
[self createTitle];
#pragma mark 创建页面
[self createView];
#pragma mark 创建Recorder
[self createRecorder];
}
-(void)createTitle
{
self.imageview = [[UIImageView alloc]init];
UIImageView *image = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"backImage.jpg"]];
image.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height + 20);
[self.view addSubview:image];
[image release];
self.view.backgroundColor = [UIColor colorWithRed:0.614 green:0.508 blue:1.000 alpha:1.000];
self.title = @"录音&播放";
[self.navigationController.navigationBar setTitleTextAttributes:
@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica-Bold" size:22],
NSForegroundColorAttributeName:[UIColor purpleColor]}];
}
-(void)createView
{
NSArray *array = @[@"开始录制", @"停止录制", @"暂停录制", @"开始播放", @"停止播放"];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
if (i == 1) {
btn.frame = CGRectMake(70 + j * 135, 450 + i * 70, 100, 50);
}
else
{
btn.frame = CGRectMake(20 + j * 115, 430 + i * 70, 100, 50);
}
if (i == 1 && j == 2) {
}
else
{
[btn setTitle:array[i * 3 + j] forState:UIControlStateNormal];
}
btn.layer.cornerRadius = 5;
[btn setTitleColor:[UIColor purpleColor] forState:UIControlStateNormal];
[self.view addSubview:btn];
btn.tag = 8000 + i * 3 + j;
[btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
}
}
}
-(void)btnAction:(UIButton *)btn
{
if (btn.tag == 8000) {
[self.L_AVAudio record]; //开始录音
[self createBeginView];
// NSLog(@"========%f", self.audioPower.progress);
self.timer.fireDate = [NSDate distantPast]; //开始定时器
self.isRecorder = YES;
}
else if (btn.tag == 8001)
{
[self.L_AVAudio stop]; //停止录音
self.timer.fireDate=[NSDate distantFuture]; //关闭定时器
self.audioPower.progress = 0.0;
}
else if (btn.tag == 8002)
{
[self.L_AVAudio pause]; //暂停录音 (0.25)
self.timer.fireDate=[NSDate distantFuture];
// NSLog(@"%@", self.timer.fireDate);
}
else if (btn.tag == 8003)
{
if (self.isRecorder) {
//开始播放
NSString *path = [[NSString alloc] initWithFormat:@"%@/%@", NSTemporaryDirectory(), @"test"];
NSLog(@"%@", path);
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:nil];
self.player.delegate = self;
[self.player prepareToPlay];
[self.player play];
// 设定位置和大小
CGRect frame = CGRectMake(80,130,0,0);
frame.size = [UIImage imageNamed:@"u=3572879117,3580921531&fm=21&gp=0.jpg.gif"].size;
// 读取gif图片数据
NSData *gif = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"u=3572879117,3580921531&fm=21&gp=0.jpg" ofType:@"gif"]];
// view生成
self.webView = [[UIWebView alloc] initWithFrame:frame];
self.webView.userInteractionEnabled = NO;//用户不可交互
[self.webView loadData:gif MIMEType:@"image/gif" textEncodingName:nil baseURL:nil];
[self.view addSubview:self.webView];
[self.webView release];
}
}
else
{
if (self.isRecorder) {
[self.player stop]; //停止播放
self.webView.hidden = YES;
self.backView.hidden = YES;
self.voView.hidden = YES;
self.imageview.image = [UIImage imageNamed:@"playStop"];
}
}
}
-(void)createBeginView
{
self.imageview.image = [UIImage imageNamed:@"beginrecording"];
self.imageview.frame = CGRectMake(80,130,220,220);
[self.view addSubview:self.imageview];
self.backView = [[UIView alloc]initWithFrame:CGRectMake(140, 325, 110, 10)];
self.backView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.backView];
self.voView = [[UIView alloc]init];
self.voView.backgroundColor = [UIColor purpleColor];
[self.view addSubview:self.voView];
}
//录音声波监控定制器
-(NSTimer *)timer{
if (!_timer) {
_timer=[NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(audioPowerChange) userInfo:nil repeats:YES];
}
return _timer;
}
-(void)audioPowerChange{
[self.L_AVAudio updateMeters];//更新测量值
float power= [self.L_AVAudio averagePowerForChannel:0];//取得第一个通道的音频,注意音频强度范围时-160到0
CGFloat progress=(1.0 / 160.0) * (power + 160.0);
NSLog(@"%f", progress);
self.voView.frame = CGRectMake(140, 325, progress * 100, 10);
[self.audioPower setProgress:progress];
}
-(void)createRecorder
{
//AVAudioSession是用来控制audio会话的,控制其是用来录音还是播放等等功能
//标明此次会话是录音+播放
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
//配置recoder
NSError *error = nil;
NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
//设置录音格式
[settings setObject:[NSNumber numberWithInt:
kAudioFormatiLBC] forKey:AVFormatIDKey];
//设置录音采样率,8000是电话采样率,对于一般录音已经够了
[settings setObject:[NSNumber numberWithFloat:8000] forKey:AVSampleRateKey];
//设置通道 单通道
[settings setObject:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
//设置采样点位数:8 16 24 32
[settings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
// [settings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
//是否使用浮点数采样
[settings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
//录音文件保存地址
NSString *path = [[NSString alloc] initWithFormat:@"%@/%@", NSTemporaryDirectory(), @"test"];
self.L_AVAudio = [[AVAudioRecorder alloc] initWithURL:[NSURL URLWithString:path] settings:settings error:&error];
self.L_AVAudio.delegate = self;
//配置号recoder并且创建录音文件
if ([self.L_AVAudio prepareToRecord]) {
NSLog(@"Prepare successful");
}
else
{
NSLog(@"Prepare fail");
}
self.L_AVAudio.meteringEnabled=YES;//如果要监控声波则必须设置为YES
}
-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
[[AVAudioSession sharedInstance] setActive:NO error:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
0 0
- AVAudioRecorder录音和AVAudioPlayer播放
- iOS AVAudioPlayer AVAudioRecorder 录音和播放
- AVAudioRecorder录音和AVAudioPlayer播放声音小的问题!
- AVAudioRecorder录音和AVAudioPlayer播放声音小的问题!
- AVFoundation框架实现录音和播放(AVAudioRecorder、AVAudioPlayer)
- 利用AVFoundation框架实现录音和播放(AVAudioSession、AVAudioRecorder、AVAudioPlayer)
- AVAudioRecorder录音和AVAudioPlayer播放声音小的问题!
- 用AVAudioRecorder录音,AVAudioPlayer播放声音很小
- IOS利用AVFoundation框架实现录音和播放(AVAudioSession、AVAudioRecorder、AVAudioPlayer)
- IOS利用AVFoundation框架实现录音和播放(AVAudioSession、AVAudioRecorder、AVAudioPlayer)
- IOS利用AVFoundation框架实现录音和播放(AVAudioSession、AVAudioRecorder、AVAudioPlayer)
- iOS--播放声音(AVAudioPlayer)、录音(AVAudioRecorder)
- Domain=NSOSStatusErrorDomain Code=1937337955 关于iOS录音AVAudioRecorder与音频播放AVAudioPlayer真机调试录音不能播放的问题
- AVAudioRecorder&AVAudioPlayer
- AVAudioRecord录音,AVAudioPlayer播放音频
- iOS开发之录音和播放问题AVAudioPlayer
- ios 使用AVAudioRecorder录制音频,然后用AVAudioPlayer进行播放
- iOS 中 SystemSoundID(播放系统声音) 和 AVAudioRecorder (录音)
- uva 1613——K-Graph Oddity
- 芒果iOS之显示隐藏资源库Library
- phalapi-进阶篇2(DI依赖注入和单例模式)
- 磁珠的作用
- CSS学习笔记之<z-index属性>
- AVAudioRecorder录音和AVAudioPlayer播放
- android 5.0新特性CardView教程
- 排序算法(五):冒泡排序
- 基于PhalApi的DB集群拓展 V0.1bate
- 百度echarts后台Java封装小实例
- 线程1: i++; i++; 线程2: i+=2; 的问题 (2013年某公司笔试题目)
- 给你的JAVA程序配置参数(Properties的使用)
- Content-disposition
- Foundation框架下的结构体