李洪强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. sublime中项目无法添加文件夹

    问题记录 mac中,使用vue init webpack project 后,在sublime中打开,但是添加新文件夹和删除,总提示没有权限, 然后用git提交吧 也不行,每次都要sudo 出现的提示 ...

  2. mac 监控文件变化并重启php

    自己撸一个框架,需要监控代码变化 安装fswatch brew install fswatch shell重启PHP脚本reload.sh #!/bin/sh do ps -ef | grep php ...

  3. Laravel(4.2)-->whereHas/ whereDoesntHave

    在开发过程中,有时间需要用 wherehas 联合查询 出想要的结果,但是有的时候想搜索出不在关联表中出现的数据 whereDoesntHave(例:搜索出开卡的用户和没有开卡的用户)if($is_o ...

  4. Java学习关于集合框架的基础接口--Collection接口

     集合框架(Collection  Framework)是Java最强大的子系统之一,位于java.util 包中.集合框架是一个复杂的接口与和类层次,提供了管理对象组的最新技术.Java集合框架标准 ...

  5. luogu3302 [SDOI2013]森林

    前置技能:Count on a tree 然后带上一个启发式合并 #include <algorithm> #include <iostream> #include <c ...

  6. fiddler终极教程

    http://www.cnblogs.com/yoyoketang/tag/fiddler/

  7. Extjs中获取grid数据

    (1)grid.getStore().getRange(0,store.getCount()); //得到grid所有的行 (2)grid.getSelectionModel().getSelecti ...

  8. webservice学习第一天

    Webservice Webservice就是一种远程调用技术,他的作用就是从远程系统中获取业务数据 1 课程安排 l 什么是webservice l Webservice入门程序 l Webserv ...

  9. 67. @Transactional的类注入失败【从零开始学Spring Boot】

    [从零开始学习Spirng Boot-常见异常汇总] Spring的代理模式有两种:java自带的动态代理模式和cglib代理模式,cglib代码模式适用于没有接口的类,而java自带适用于接口类,默 ...

  10. [Docker]容器的隔离与限制

    1.Docker事实 1)容器技术的兴起源于Pass技术的普及 2)Docker公司发布的Docker项目具有里程碑式的意义 3)Docker项目通过容器镜像解决了应用打包这个根本性难题 4)容器本身 ...