Oc 录音机 功能(系统方法)~dome

认识下面的类
AVAudioRecorder //音频录音机
AVAudioPlayer //音频播放器

![Uploading 20170628224501549_649336.png . . .]
NSTimer //定时器
2.布局界面 连线
显示时间
回放点击
开始录制
停止录制
回放录音....等操作

Oc 录音机 功能(系统方法)~dome_第1张图片
20170628224501549.png
#import "ViewController.h"
#import 

@interface ViewController ()
{
    AVAudioRecorder *_audioRecoder;//音频录音机
    AVAudioPlayer *_avplayer;//音频播放器
    NSTimer *_timer;//定时器
    int      _count;//保存数量
    BOOL     _isSwitch;//是否开关
}

//开始录制属性
@property (weak,nonatomic) IBOutletUIButton *btnStart;
//显示时间
@property (weak,nonatomic) IBOutletUILabel *showTime;
//回放属性
@property (weak,nonatomic) IBOutletUIButton *btnPlayBack;
//文件路径
@property (nonatomic ,copy) NSString *documentsPath;

//开始录制
- (IBAction)startRecording:(id)sender;
//停止录制
- (IBAction)stopRecording:(id)sender;
//回放录音
- (IBAction)playBackRecording:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _isSwitch =YES;
}

//开始录制
- (IBAction)startRecording:(id)sender {
    //判断录音控制器是否为空或者正在录制;
    if (_audioRecoder==nil &&_audioRecoder.isRecording)
    {
        //设置控制器停止录制;
        [_audioRecoder stop];
        //设置按钮的标题为开始录制;
        [_btnStart setTitle:@"开始录制"forState:UIControlStateNormal];
        [_timer invalidate];
        _timer =nil;

    }else{
        _count =0;
        _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(repeatShowTime:)userInfo:@"admin"repeats:YES];
        
#pragma mark 下面设置录音的参数和录音文件的保存路径等信息
        //获取音频文件的保存路径
        NSString *destinationStr = [[self documentsPath] stringByAppendingPathComponent:@"sound.wav"];
        NSURL *destinationUrl = [NSURL fileURLWithPath:destinationStr];
        //创建一个Dictionary,用于保存录制属性
        NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
        //设置录制音频的格式
        [recordSettings setObject:[NSNumber numberWithInt:kAudioFormatLinearPCM]forKey:AVFormatIDKey];
        //设置录制音频的采样率
        //        [recordSettings setObject:[NSNumber numberWithFloat:@"1".floatValue] forKey:AVSampleRateKey];
        //设置录制音频的通道数
        [recordSettings setObject:[NSNumber numberWithInt:(_isSwitch =/* DISABLES CODE */ (YES) ?2:1)]forKey:AVNumberOfChannelsKey];
        //设置录制音频采用高位优先的记录格式
        [recordSettings setObject:[NSNumber numberWithBool:YES]forKey:AVLinearPCMIsBigEndianKey];
        //设置采样信号采用浮点数
        [recordSettings setObject:[NSNumber numberWithBool:YES]forKey:AVLinearPCMIsFloatKey];
        NSError *recorderSetupError =nil;
        
#pragma mark 到这里开始实例化录音对象
        //初始化AVAudioRecorder
        _audioRecoder = [[AVAudioRecorder alloc] initWithURL:destinationUrl settings:recordSettings error:&recorderSetupError];
        _audioRecoder.delegate =self;
        [_audioRecoder record];
        //设置单个按钮的状态为录音
        [_btnStart setTitle:@"正在录音"forState:UIControlStateNormal];
    }
}

//停止播放
- (IBAction)stopRecording:(id)sender {
    
    [_audioRecoder stop];
    [_btnStart setTitle:@"开始录制"forState:UIControlStateNormal];
    //设置计时器为初始值;
    if (_timer) {
        [_timer invalidate];
        _timer =nil;
    }
    _count =0;
    _showTime.text =@"00:00";
}

//回放录音
- (IBAction)playBackRecording:(id)sender {
    
    //获取音频文件的保存路径
    NSString *destinationString = [[selfdocumentsPath] stringByAppendingPathComponent:@"sound.wav"];
    NSURL *url = [NSURLfileURLWithPath:destinationString];
    //创建AVAudioPlayer对象
    _avplayer = [[AVAudioPlayeralloc] initWithContentsOfURL:urlerror:nil];
    //开始播放
    [_avplayerplay];
    _btnPlayBack.backgroundColor=[UIColorgreenColor];
    
}

//获取Documents目录路径
-(NSString *)documentsPath{
    
    if (!_documentsPath) {
        
        NSArray *searchPath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        _documentsPath = searchPath[0];
        
    }
    
    return_documentsPath;
}

#pragma mark- 录制音频的代理方法
- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
    NSLog(@"---->被中断!");
}
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)aRecorder successfully:(BOOL)flag
{
    if(flag)
    {
        NSLog(@"---->录制完成!!");
    }
}
- (void)repeatShowTime:(NSTimer *)tempTimer {
    
    _count++;
    //设置在文本框上显示时间;
    _showTime.text = [NSStringstringWithFormat:@"%02d:%02d",_count/60,_count%60];
}

- (void)dealloc {  //销毁NSTimer
    if (_timer) {
        [_timerinvalidate];
        _timer =nil;
    }
}

@end

你可能感兴趣的:(Oc 录音机 功能(系统方法)~dome)