//联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄
/**
注意:这是实现录音机效果图,下面是实现代码(直接拷贝到项目就可以用)
*/
图1:
图2:
图3:
图4:
图5:
图6:
*****************录音机 代码实现******************
// ViewController.m
//录音机
//
// Created by石虎on 2017/6/28.
// Copyright © 2017年shihu. All rights reserved.
#import"ViewController.h"
#import
@interfaceViewController()
{
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
@implementationViewController
- (void)viewDidLoad {
[superviewDidLoad];
_isSwitch=YES;
}
//开始录制
- (IBAction)startRecording:(id)sender {
//判断录音控制器是否为空或者正在录制;
if(_audioRecoder==nil&&_audioRecoder.isRecording)
{
//设置控制器停止录制;
[_audioRecoderstop];
//设置按钮的标题为开始录制;
[_btnStartsetTitle:@"开始录制"forState:UIControlStateNormal];
[_timerinvalidate];
_timer=nil;
}else{
_count=0;
_timer= [NSTimerscheduledTimerWithTimeInterval:1.0ftarget:selfselector:@selector(repeatShowTime:)userInfo:@"admin"repeats:YES];
#pragma mark下面设置录音的参数和录音文件的保存路径等信息
//获取音频文件的保存路径
NSString*destinationStr = [[selfdocumentsPath]stringByAppendingPathComponent:@"sound.wav"];
NSURL*destinationUrl = [NSURLfileURLWithPath:destinationStr];
//创建一个Dictionary,用于保存录制属性
NSMutableDictionary*recordSettings = [[NSMutableDictionaryalloc]init];
//设置录制音频的格式
[recordSettingssetObject:[NSNumbernumberWithInt:kAudioFormatLinearPCM]forKey:AVFormatIDKey];
//设置录制音频的采样率
// [recordSettings setObject:[NSNumber numberWithFloat:@"1".floatValue] forKey:AVSampleRateKey];
//设置录制音频的通道数
[recordSettingssetObject:[NSNumbernumberWithInt:(_isSwitch=/* DISABLES CODE */(YES) ?2:1)]forKey:AVNumberOfChannelsKey];
//设置录制音频采用高位优先的记录格式
[recordSettingssetObject:[NSNumbernumberWithBool:YES]forKey:AVLinearPCMIsBigEndianKey];
//设置采样信号采用浮点数
[recordSettingssetObject:[NSNumbernumberWithBool:YES]forKey:AVLinearPCMIsFloatKey];
NSError*recorderSetupError =nil;
#pragma mark到这里开始实例化录音对象
//初始化AVAudioRecorder
_audioRecoder= [[AVAudioRecorderalloc]initWithURL:destinationUrlsettings:recordSettingserror:&recorderSetupError];
_audioRecoder.delegate=self;
[_audioRecoderrecord];
//设置单个按钮的状态为录音
[_btnStartsetTitle:@"正在录音"forState:UIControlStateNormal];
}
}
//停止播放
- (IBAction)stopRecording:(id)sender {
[_audioRecoderstop];
[_btnStartsetTitle:@"开始录制"forState:UIControlStateNormal];
//设置计时器为初始值;
if(_timer) {
[_timerinvalidate];
_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
谢谢!!!
网友评论