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

来源:互联网 发布:淘宝波奇网有假货吗 编辑:程序博客网 时间:2024/05/21 06:43

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

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

20170628224501549.png

#import "ViewController.h"#import <AVFoundation/AVFoundation.h>@interface ViewController ()<AVAudioRecorderDelegate>{    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</span>    if (_timer) {        [_timerinvalidate];        _timer =nil;    }}@end