美文网首页
OC 录音机 功能的实现

OC 录音机 功能的实现

作者: J_mine | 来源:发表于2017-08-21 19:49 被阅读0次
屏幕快照 2017-08-21 下午7.38.44.png

如图所示 首先拖拽 3个button控件与两个lable控件,并写上title,然后将其关联

屏幕快照 2017-08-21 下午7.40.34.png

接下来 进入代码的阶段

首先 要导入AVFoundation框架,并设置代理 以及创建一些全局变量方便以后的调用

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>

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

此处是关联过来的方法以及文件的存储路径

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

// 开始录制
- (IBAction)startRecording:(id)sender;

// 停止录制
- (IBAction)stopRecording:(id)sender;

// 回放录音
- (IBAction)playBackRecording:(id)sender;


注意在 拖拽按钮的时候 我们需要将其Connection处改成Action在进行关联,这样的操作可以方便我们在按钮的方法里直接书写代码

在viewDidLoad中进行以下的书写

- (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 = [[self documentsPath] stringByAppendingPathComponent:@"sound.wav"];
    NSURL *url = [NSURL fileURLWithPath:destinationString];
    //创建AVAudioPlayer对象
    _avplayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    //开始播放
    [_avplayer play];
    _btnPlayBack.backgroundColor=[UIColor greenColor];
}

获取文件的路径

//获取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 = [NSString stringWithFormat:@"%02d:%02d",_count/60,_count%60];
}

- (void)dealloc
{  //销毁NSTimer</span>
    if (_timer)
    {
        [_timer invalidate];
        _timer = nil;
    }
}

相关文章

  • OC 录音机 功能的实现

    如图所示 首先拖拽 3个button控件与两个lable控件,并写上title,然后将其关联 接下来 进入代码的阶...

  • Python调用Windows API函数编写录音机和音乐播放器

    功能描述: 1)使用tkinter设计程序界面; 2)调用Windows API函数实现录音机和音乐播放器。 。 ...

  • OpenShift强大的oc set命令详解

    OpenShift的client工具oc功能非常强大,几乎能实现所有的操作,它的每一个子命令都能实现非常多的功能。...

  • 热更新的几种实现方式

    热更新的几种实现方式 [TOC] 一. 动态库 使用 OC / Swift 原生实现 把需要集成的功能模块,打包成...

  • 深入 Block

    Block 前言 Block是OC中对C语言的扩展功能,是一种带有自动变量的匿名函数,Block在OC中的实现,点...

  • 随笔

    oc实质上是在c语言的基础上进行了一层oc包装,也可以说c语言就是oc的父类(超类),所有oc语言能实现的功能用c...

  • Android-实现一个简单的录音机功能程序

    手机的录音功能随处可见,今以一个简单的实例来阐述如何实现一个简单的录音机功能。UI元素:四个按钮分别执行表示录音、...

  • swift codable

    一、codable功能 OC常用模式: 示例代码如下: swift codable实现从json字符串 直接转 ...

  • Swift-面向协议编程

    Swift协议里的方法可以实现 OC只能声明方法所以Swift才能实现面向协议编程 需要这个功能的,只需要遵守这...

  • OC与Swift混编之xxx-Swift.h file not

    我的项目是framework工程,OC实现,最近加了些swift的功能代码,然后在target为framework...

网友评论

      本文标题:OC 录音机 功能的实现

      本文链接:https://www.haomeiwen.com/subject/nkuhdxtx.html