李洪强iOS开发之录音和播放实现

//首先导入框架后,导入头文件.以下内容为托控件,在storyboard中拖出两个按钮为录音和播放按钮

//创建一个UIViewController在.h文件中写

#import<UIKit/UIKit.h>

#import<AVFoundation/AVFoundation.h>

@interface ViewController : UIViewController

//录音存储路径

@property (nonatomic, strong)NSURL *tmpFile;

//录音

@property (nonatomic, strong)AVAudioRecorder*recorder;

//播放

@property (nonatomic, strong)AVAudioPlayer *player;

//录音状态(是否录音)

@property (nonatomic, assign)BOOL isRecoding;

@end

//在.m文件中写

#import "ViewController.h"

//添加代理

@interface ViewController ()<AVAudioPlayerDelegate>

//录音按钮

@property (weak, nonatomic) IBOutlet UIButton*recordButton;

//播放按钮

@property (weak, nonatomic) IBOutlet UIButton*playButton;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//刚打开的时候录音状态为不录音

self.isRecoding = NO;

//播放按钮不能被点击

[self.playButton setEnabled:NO];

//播放按钮设置成半透明

self.playButton.titleLabel.alpha = 0.5;

//创建临时文件来存放录音文件

self.tmpFile = [NSURL fileURLWithPath:[NSTemporaryDirectory()stringByAppendingString:@"TmpFile"]];

//设置后台播放

AVAudioSession *session = [AVAudioSessionsharedInstance];

NSError *sessionError;

[sessionsetCategory:AVAudioSessionCategoryPlayAndRecorderror:&sessionError];

//判断后台有没有播放

if (session == nil) {

NSLog(@"Error creating sessing:%@", [sessionError description]);

} else {

[session setActive:YES error:nil];

}

}

//录音按钮方法的实现

- (IBAction)startStopRecord:(id)sender {

//判断当录音状态为不录音的时候

if (!self.isRecoding) {

//将录音状态变为录音

self.isRecoding = YES;

//将录音按钮变为停止

[self.recordButton setTitle:@"停止"forState:UIControlStateNormal];

//播放按钮不能被点击

[self.playButton setEnabled:NO];

self.playButton.titleLabel.alpha = 0.5;

//开始录音,将所获取到得录音存到文件里

self.recorder = [[AVAudioRecorder alloc]initWithURL:_tmpFile settings:nil error:nil];

//准备记录录音

[_recorder prepareToRecord];

//启动或者恢复记录的录音文件

[_recorder record];

_player = nil;

} else {

//录音状态 点击录音按钮 停止录音

self.isRecoding = NO;

[self.recordButton setTitle:@"录音"forState:UIControlStateNormal];

//录音停止的时候,播放按钮可以点击

[self.playButton setEnabled:YES];

[self.playButton.titleLabel setAlpha:1];

//停止录音

[_recorder stop];

_recorder = nil;

&nnbsp;

NSError *playError;

self.player = [[AVAudioPlayer alloc]initWithContentsOfURL:_tmpFile error:&playError];

//当播放录音为空, 打印错误信息

if (self.player == nil) {

NSLog(@"Error crenting player: %@", [playError description]);

}

self.player.delegate = self;

}

}

//播放按钮方法的实现

- (IBAction)playPause:(id)sender {

//判断是否正在播放,如果正在播放

if ([self.player isPlaying]) {

//暂停播放

[_player pause];

//按钮显示为播放

[self.playButton setTitle:@"播放"forState:UIControlStateNormal];

} else {

//开始播放

[_player play];

//

[self.playButton setTitle:@"暂停"forState:UIControlStateNormal];

}

}

//当播放结束后调用这个方法

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag

{

//按钮标题变为播放

[self.playButton setTitle:@"播放"forState:UIControlStateNormal];

}

李洪强iOS开发之录音和播放实现的更多相关文章

  1. 李洪强iOS开发之-环信05_EaseUI 使用指南

    李洪强iOS开发之-环信05_EaseUI 使用指南 EaseUI 使用指南 简介 EaseUI 封装了 IM 功能常用的控件(如聊天会话.会话列表.联系人列表).旨在帮助开发者快速集成环信 SDK. ...

  2. 李洪强iOS开发之添加手势

    李洪强iOS开发之添加手势 02 - 添加手势

  3. 李洪强iOS开发之- 实现简单的弹窗

     李洪强iOS开发之- 实现简单的弹窗 实现的效果:  112222222222223333333333333333

  4. 李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView

    李洪强iOS开发之后使用XIB实现横向滚动的UIScrollView 11111222

  5. 李洪强iOS开发之苹果使用预览截图

    李洪强iOS开发之苹果使用预览截图 01 在预览的图片中选中你要截得区域  02 - command + C   03 - Command + N 04 - Command + S (保存)

  6. 李洪强iOS开发之通知的使用

    李洪强iOS开发之通知的使用 01 - 在A中发送通知 02 - 在B中监听通知 03 - 在B中通知出发的方法 04 - 在B控制器viewDidLoad调用通知

  7. 李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView

    李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView (VTmagic是一个实现左右滚动的控制器的框架,也可以实现此功能) 实现的效果:  01 - 创建四个控制器 02 - 定义需要 ...

  8. 李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片

     李洪强iOS开发之 - 实现九宫格并使用SDWebImage下载图片  源码:  // //  ViewController.m //  08-九宫格扩展 // //  Created by 李洪强 ...

  9. 李洪强iOS开发之 - WebViewJavascriptBridge

    李洪强iOS开发之 - WebViewJavascriptBridge 01 - JS端:   02 - iOS端 01 遵守代理协议 02 申明属性 03 开启日志 04 给哪个webview建立J ...

随机推荐

  1. Css选择器和JQuery基本编程接口

    使用JQuery之前,首先从官网下载库文件 http://jquery.com/ jquery-2.1.4.js和jquery-2.1.4.min.js,前者是完整无压缩版本,用于开发调试:后者是压缩 ...

  2. Python运维工程师

    1.单引号,双引号,三引号的区别. 2.Python里面如何实现tuple和List的转换. 3.Python的参数传递是值传递还是引用传递,举例说明Python函数参数传递的几种形式,并说明函数传参 ...

  3. solr之windws下搭建solr服务

    安装Solr 首先保证已经正确安装了Java 下载Solr,当前最新版6.1.0 Solr各个版本下载地址 Solr从6.0之后需要Java1.8所以如果使用Solr6.0及其以上版本,请确保Java ...

  4. my97datepicker插件日期值改变事件 等同于input的onchang()时间

    官网Demo地址http://www.my97.net/demo/index.htm <input type="text" class="Wdate" v ...

  5. 【HIHOCODER 1575】 两个机器人(BFS)

    描述 一个N × M的2D迷宫中有两个机器人.机器人A在迷宫左上角,只能向右或向下移动:机器人B在迷宫右下角,只能向左或向上移动.机器人不能移动到迷宫外.此外,由于奇怪的同步机制,这两个机器人只能同时 ...

  6. C语言 NULL 是什么鬼

    NULL , 0 , '\0'  之间的区别与联系 1.NULL 结构体的使用中,都可以用NULL表示空,那么NULL是什么 #ifndef __cplusplus #define NULL ((vo ...

  7. 活动预告丨易盾CTO朱浩齐将出席2018 AIIA大会,分享《人工智能在内容安全的应用实践》

    本文来自网易云社区 对于很多人来讲,仿佛昨天才燃起来的人工智能之火,转眼间烧遍了各个角落,如今我们的生活中,处处渗透着人工智能.10月16日,2018年 AIIA人工智能开发者大会在苏州举办,网易云易 ...

  8. spring的IOC入门案例

    步骤: 一,导入jar 二,创建类,在类里创建方法 三,创建Spring配置文件,配置创建类 四,写代码测试对象创建

  9. 一个抓取智联招聘数据并存入表格的python爬虫

    talk is cheap...show you the code..... import requests import lxml,time,os from bs4 import Beautiful ...

  10. THUPC2017看题总结

    THUPC2017 看题总结 #2402. 「THUPC 2017」天天爱射击 / Shooting 果题. 求当前子弹能会使多少块木板损坏,发现因为木板会随着子弹数目的增加而更加容易损坏,故此询问具 ...