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

#import

#import


@interface AudioRecoderViewController : UIViewController

{


    UILabel *label;

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

    AVAudioRecorder *recoder;

    //播放

    AVAudioPlayer *player;

    

}


@property(nonatomic,retain) AVAudioRecorder *recoder;

@property(nonatomic,retain) AVAudioPlayer *player;

@end



import "AudioRecoderViewController.h"


@interface AudioRecoderViewController ()


@end


@implementation AudioRecoderViewController

@synthesize recoder,player;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

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

    if (self) {

        // Custom initialization

    }

    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:self action:@selector(startRecoder) forControlEvents:UIControlEventTouchUpInside];

    //添加显示

    [self.view addSubview:button];

    

    //定义按钮

    UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

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

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

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

    //添加显示

    [self.view addSubview:btn2];

    

    //定义按钮

    UIButton *btn3 = [UIButton buttonWithType:UIButtonTypeRoundedRect];

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

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

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

    

    //添加显示

    [self.view addSubview:btn3];

    

}


//开始录制的方法

-(void)startRecoder{


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

    label.textColor = [UIColor redColor];

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

    label.textAlignment = NSTextAlignmentCenter;


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

    if (recoder.isRecording) {

        [recoder stop];

    }

    if (player.isPlaying) {

        [player stop];

    }

    NSError *err = nil;

    //设定录制信息

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

    [[AVAudioSession sharedInstance] setActive:YES error:&err];

    //设置采样的详细数据

    NSMutableDictionary *settings = [NSMutableDictionary dictionary];

    [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) {

        [recoder stop];

    }

    

    if(player.isPlaying){

    

        [player stop];

    }

    

}


//开始播放

-(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:AVAudioSessionCategoryPlayback error:&err];

    //设定为激活状态

    [[AVAudioSession sharedInstance] 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

{

    [super viewDidLoad];

// Do any additional setup after loading the view.

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值