iOS 专栏开源工具技巧iOS Developer

iOS 录音机 功能(系统方法)

2017-06-28  本文已影响64人  石虎132

//联系人:石虎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

谢谢!!!

上一篇下一篇

猜你喜欢

热点阅读