在程序中实现录音功能的实现代码及…

来源:互联网 发布:注册域名免费 编辑:程序博客网 时间:2024/05/16 07:29

#import

#import


@interfaceAudioRecoderViewController : UIViewController

{


    UILabel *label;

   //定义专门进行录制的类AVAudioRecoder

    AVAudioRecorder *recoder;

    //播放

    AVAudioPlayer *player;

    

}


@property(nonatomic,retain) AVAudioRecorder *recoder;

@property(nonatomic,retain) AVAudioPlayer *player;

@end



import"AudioRecoderViewController.h"


@interfaceAudioRecoderViewController ()


@end


@implementationAudioRecoderViewController

@synthesize recoder,player;


- (id)initWithNibName:(NSString *)nibNameOrNilbundle:(NSBundle*)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

       // Custominitialization

    }

   return self;

}


//视图资源的加载

-(void)loadView{

    

   //定义UIView

   UIView *view= [[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame];

   view.backgroundColor =[UIColor orangeColor];

    self.view = view;

    

   //状态显示label的初始化

   label= [[UILabel alloc] initWithFrame:CGRectMake(90,40, 160,40)];

   //设置label状态显示显示为正在录制

   label.textColor =[UIColor greenColor];

    label.text = @"等待录制";

   label.textAlignment = NSTextAlignmentCenter;

    [self.view addSubview:label];

    

   //定义按钮

   UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    button.frame = CGRectMake(90, 100, 160, 40);

   [button setTitle:@"开始录制"forState:UIControlStateNormal];

   [button addTarget:selfaction:@selector(startRecoder) forControlEvents:UIControlEventTouchUpInside];

   //添加显示

    [self.view addSubview:button];

    

   //定义按钮

   UIButton *btn2= [UIButtonbuttonWithType:UIButtonTypeRoundedRect];

    btn2.frame = CGRectMake(90, 160, 160, 40);

   [btn2 setTitle:@"停止录制"forState:UIControlStateNormal];

   [btn2 addTarget:selfaction:@selector(stopRecoder) forControlEvents:UIControlEventTouchUpInside];

   //添加显示

    [self.view addSubview:btn2];

    

   //定义按钮

   UIButton *btn3= [UIButtonbuttonWithType:UIButtonTypeRoundedRect];

    btn3.frame = CGRectMake(90, 220, 160, 40);

   [btn3 setTitle:@"播放录制"forState:UIControlStateNormal];

   [btn3 addTarget:selfaction:@selector(startRecoderPlay)forControlEvents:UIControlEventTouchUpInside];

    

   //添加显示

    [self.view addSubview:btn3];

    

}


//开始录制的方法

-(void)startRecoder{


   //设置label状态显示显示为正在录制

   label.textColor =[UIColor redColor];

    label.text = @"录制中...";

   label.textAlignment = NSTextAlignmentCenter;


   //判断当前的录制状态和播放状态

   if(recoder.isRecording){

       [recoderstop];

    }

    if (player.isPlaying) {

       [playerstop];

    }

    NSError *err = nil;

   //设定录制信息

   [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:&err];

   [[AVAudioSessionsharedInstance]setActive:YES error:&err];

   //设置采样的详细数据

   NSMutableDictionary *settings = [NSMutableDictionarydictionary];

   [settings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];

   [settings setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; //采样率

   [settings setValue:[NSNumber numberWithInt:1]

             forKey:AVNumberOfChannelsKey];//通道的数目

   [settings setValue:[NSNumber numberWithInt:16]forKey:AVLinearPCMBitDepthKey];//采样位数默认 16

   [settings setValue:[NSNumber numberWithBool:NO]forKey:AVLinearPCMIsBigEndianKey];//大端还是小端是内存的组织方式

   [settings setValue:[NSNumber numberWithBool:NO]forKey:AVLinearPCMIsFloatKey];//采样信号是整数还是浮点数

    

   //定义路径,设定要保存的位置 /BDEIDJDFDSF-SDfDS4232/document

   NSString *dir= [NSHomeDirectory()stringByAppendingPathComponent:@"documents"];

   //设定路径

    NSString *savePath = [NSString stringWithFormat:@"%@/testAudio.aif",dir];

    

    NSLog(@"savaPath:%@",savePath);

    

   //定义URL

    NSURL *fileUrl = [NSURL fileURLWithPath:savePath];

    

    if (err) {

       NSLog(@"录制之前配置出错了!");

       return;

    }

   //初始化了录制的类

    recoder  = [[AVAudioRecorder alloc] initWithURL:fileUrl settings:settings error:&err];

   //开始录制

    [recoder record];


}


//停止录制的方法

-(void)stopRecoder{

    

   //设置label状态显示显示为正在录制

   label.textColor =[UIColor greenColor];

    label.text = @"已停止...";

   label.textAlignment = NSTextAlignmentCenter;

    

   //正在录制的时候,要停止录制,正在播放的时候,要停止播放

   if(recoder.isRecording){

       [recoderstop];

    }

    

   if(player.isPlaying){

    

       [playerstop];

    }

    

}


//开始播放

-(void)startRecoderPlay{

    

   //设置label状态显示显示为正在录制

   label.textColor =[UIColor purpleColor];

   label.text= @"正在播放...";

   label.textAlignment = NSTextAlignmentCenter;

    

    NSError *err = nil;

   //获得录制的文件的路径

   //定义路径,设定要保存的位置 /BDEIDJDFDSF-SDfDS4232/document

   NSString *dir= [NSHomeDirectory()stringByAppendingPathComponent:@"documents"];

   //设定路径

    NSString *savePath = [NSString stringWithFormat:@"%@/testAudio.aif",dir];

   //定义URL

    NSURL *fileUrl = [NSURL fileURLWithPath:savePath];

   //设定后台播放

   [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlaybackerror:&err];

   //设定为激活状态

   [[AVAudioSessionsharedInstance]setActive:YES error:&err];

   //使用播放器进行播放

   player  = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:&err];

    

    [player play];

    

    

}


- (void)dealloc

{

    [recoder release];

    [player release];

    [label release];

    [super dealloc];

}


- (void)viewDidLoad

{

   [superviewDidLoad];

// Do any additional setup after loading the view.

}


- (void)didReceiveMemoryWarning

{

   [superdidReceiveMemoryWarning];

   // Dispose of any resources that can berecreated.

}