您的位置:首页 > 其它

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

2017-10-31 19:44 197 查看
认识下面的类

AVAudioRecorder //音频录音机

AVAudioPlayer //音频播放器

![Uploading 20170628224501549_649336.png …]

NSTimer //定时器

2.布局界面 连线

显示时间

回放点击

开始录制

停止录制

回放录音….等操作



#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  界面 布局
相关文章推荐