- 浏览: 1037404 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
繁星水:
Useful!!
Object-C之(Null)与(Bool) -
pacer123:
请问注解@ApiModelProperty 在哪个jar包下面 ...
Micro Service工具集之Swagger:可测试的样式化API文档 -
sucheng2016:
这东东真的好用么/
对象转换利器之Dozer -
zzq0324:
http://git.oschina.net/zzq0324/ ...
基于Spring-WS的Restful API的集成测试 -
lrz0534:
你好,我在maven上面下载了swagger-springmv ...
Micro Service工具集之Swagger:可测试的样式化API文档
在iOS的基础类库中, 提供了AVFoundation FrameWork,即Audio/Video基础类库,通过使用这个类库,可以非常容易的在应用程序录制,播放视频,音频等。本文将通过一个简单的录音笔应用,介绍如何在iOS应用程序中使用AVAudioRecorder,AVAudioPlayer。录音笔的界面以及功能都非常简单,如下:
1. 当程序启动时,界面会出现录音按钮。
2. 用户点击录音按钮,按钮变色,进入录音状态。
3. 录音状态下,用户点击录音按钮,录音结束,播放按钮出现
4. 用户点击播放按钮,进入播放录音状态,播放录音时,录音按钮不可用。
下面就来一步一步的实现这个简单的录音笔应用:
首先,新起项目,并把AVFoundation FrameWork加入到当前项目中:
然后,创建MainViewController,并引入AVFoundation.h文件,创建AVAduioPlayer和AVAudioRecorder属性,以及界面元素需要的属性,同时定义点击按钮时需要使用的方法:
```
接着,把UI元素和响应的属性,方法绑定起来:
再接下来,在界面加载(viewDidLoad)的时候,隐藏播放按钮并初始化AvdudioRecorder,初始化Recorder需要2个元素:
* 录制效果配置,主要就是配置录制声音时的比特率,采样率等等,更多具体的内容:[Audio配置]http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVFoundationAudioSettings_Constants/Reference/reference.html#//apple_ref/doc/uid/TP40009937
* 录音保存的文件URL
初始化后,调用[self.audioRecorder prepareToRecord]方法,该方法会配置好Recorder并创建好录音文件。
配置好Recorder之后,开始,实现录音按钮,录音按钮功能非常简单,只需要判断当前Recorder处于录音状态则调用stop方法结束录音,否则调用record方法开始录音,同时更新UI元素。
录音结束之后,播放按钮会出现,接下来实现播放按钮的点击效果,其实现和Record按钮差不多, 判断当前的Player处于播放状态则调用pause方法停止播放,否则,初始化Player,然后调用play方法播放按钮。AVAudioPlayer的初始化非常简单,只需要知道声音文件的URL即可。
当声音文件播放结束时,需要通知主程序,这就涉及到使用AVAudioPlayerDelegate,顺道我们也可以实现AVAudioRecorderDelegate以记录Recorder的状态。
That's All! 本文只是对AVAudioRecorder,AVAudioPlayer做了最简单的介绍,更多的内容请参考苹果的开发者文档:
* AVAudioRecorder:http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html#//apple_ref/occ/instp/AVAudioRecorder/settings
* AVAudioPlayer:http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html
另外,这儿还有一篇不错的分析iPhone中使用音频的文章:http://www.raywenderlich.com/zh-hans/20608/iphone%E5%BC%80%E5%8F%91%E4%B9%8B%E9%9F%B3%E9%A2%91101-%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9A-%E6%96%87%E4%BB%B6%E5%92%8C%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B
所有的源代码在这儿:https://github.com/xianlinbox/AudioDemo
1. 当程序启动时,界面会出现录音按钮。
2. 用户点击录音按钮,按钮变色,进入录音状态。
3. 录音状态下,用户点击录音按钮,录音结束,播放按钮出现
4. 用户点击播放按钮,进入播放录音状态,播放录音时,录音按钮不可用。
下面就来一步一步的实现这个简单的录音笔应用:
首先,新起项目,并把AVFoundation FrameWork加入到当前项目中:
然后,创建MainViewController,并引入AVFoundation.h文件,创建AVAduioPlayer和AVAudioRecorder属性,以及界面元素需要的属性,同时定义点击按钮时需要使用的方法:
#import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface MainViewController : UIViewController<AVAudioPlayerDelegate,AVAudioRecorderDelegate> @property (strong, nonatomic) AVAudioRecorder *audioRecorder; @property (strong, nonatomic) AVAudioPlayer *audioPlayer; @property (nonatomic, weak) IBOutlet UIButton *recordButton; @property (nonatomic, weak) IBOutlet UIButton *playButton; -(IBAction)recordButtonAction:(id)sender; -(IBAction)playButtonAction:(id)sender; @end
```
接着,把UI元素和响应的属性,方法绑定起来:
再接下来,在界面加载(viewDidLoad)的时候,隐藏播放按钮并初始化AvdudioRecorder,初始化Recorder需要2个元素:
* 录制效果配置,主要就是配置录制声音时的比特率,采样率等等,更多具体的内容:[Audio配置]http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVFoundationAudioSettings_Constants/Reference/reference.html#//apple_ref/doc/uid/TP40009937
* 录音保存的文件URL
初始化后,调用[self.audioRecorder prepareToRecord]方法,该方法会配置好Recorder并创建好录音文件。
- (void)viewDidLoad { [super viewDidLoad]; self.playButton.hidden = YES; //配置Recorder, NSDictionary *recordSetting = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:AVAudioQualityLow],AVEncoderAudioQualityKey, [NSNumber numberWithInt:16],AVEncoderBitRateKey, [NSNumber numberWithInt:2],AVNumberOfChannelsKey, [NSNumber numberWithFloat:44100.0],AVSampleRateKey, nil]; //录音文件保存地址的URL NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/record.caf", [[NSBundle mainBundle] resourcePath]]]; NSError *error = nil; self.audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&error]; if (error != nil) { NSLog(@"Init audioRecorder error: %@",error); }else{ //准备就绪,等待录音,注意该方法会返回Boolean,最好做个成功判断,因为其失败的时候无任何错误信息抛出 if ([self.audioRecorder prepareToRecord]) { NSLog(@"Prepare successful"); } } }
配置好Recorder之后,开始,实现录音按钮,录音按钮功能非常简单,只需要判断当前Recorder处于录音状态则调用stop方法结束录音,否则调用record方法开始录音,同时更新UI元素。
-(IBAction)recordButtonAction:(id)sender { if (!self.audioRecorder.recording) { self.playButton.hidden = YES; [self.audioRecorder record]; [self.recordButton setImage:[UIImage imageNamed:@"MicButtonPressed.png"] forState:UIControlStateNormal]; }else { self.playButton.hidden = NO; [self.audioRecorder stop]; [self.recordButton setImage:[UIImage imageNamed:@"MicButton.png"] forState:UIControlStateNormal]; } }
录音结束之后,播放按钮会出现,接下来实现播放按钮的点击效果,其实现和Record按钮差不多, 判断当前的Player处于播放状态则调用pause方法停止播放,否则,初始化Player,然后调用play方法播放按钮。AVAudioPlayer的初始化非常简单,只需要知道声音文件的URL即可。
-(IBAction)playButtonAction:(id)sender { if (!self.audioPlayer.playing) { self.recordButton.hidden = YES; NSError *error; NSLog(@"%@",self.audioRecorder.url); self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:self.audioRecorder.url error:&error]; self.audioPlayer.delegate = self; if (error != nil) { NSLog(@"Wrong init player:%@", error); }else{ [self.audioPlayer play]; } [self.playButton setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal]; }else { self.recordButton.hidden = NO; [self.audioPlayer pause]; [self.playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; } }
当声音文件播放结束时,需要通知主程序,这就涉及到使用AVAudioPlayerDelegate,顺道我们也可以实现AVAudioRecorderDelegate以记录Recorder的状态。
#pragma mark audio delegate -(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { NSLog(@"Finsh playing"); self.recordButton.hidden = NO; [self.playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal]; } -(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error { NSLog(@"Decode Error occurred"); } -(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag { NSLog(@"Finish record!"); } -(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error { NSLog(@"Encode Error occurred"); }
That's All! 本文只是对AVAudioRecorder,AVAudioPlayer做了最简单的介绍,更多的内容请参考苹果的开发者文档:
* AVAudioRecorder:http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html#//apple_ref/occ/instp/AVAudioRecorder/settings
* AVAudioPlayer:http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html
另外,这儿还有一篇不错的分析iPhone中使用音频的文章:http://www.raywenderlich.com/zh-hans/20608/iphone%E5%BC%80%E5%8F%91%E4%B9%8B%E9%9F%B3%E9%A2%91101-%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9A-%E6%96%87%E4%BB%B6%E5%92%8C%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B
所有的源代码在这儿:https://github.com/xianlinbox/AudioDemo
发表评论
-
Xcode的代码结构管理
2015-07-21 22:34 2787Merge Conflicts on .project fil ... -
记Protocol Oriented Programming in Swift of WWDC 2015
2015-07-12 20:28 1840其实最先朋友让我就这个题目写篇文章的时候,我是拒绝的,因为觉得 ... -
你应该知道的Core Animation知识
2015-06-07 00:04 1325分享最近读的一本书:https://github.com/At ... -
iOS7之定制View Controller切换效果
2014-04-18 23:19 38439在iOS5和iOS6前,View Controller的切换主 ... -
Object-C之(Null)与(Bool)
2014-04-05 14:08 9137在写iOS程序的时候,想初始化一个空值的时候,经常会迷茫到底是 ... -
iOS之Local Notification(本地通知)·
2014-03-23 21:31 19530Local Notification的作用 Local Not ... -
实战iOS7之后台多任务
2014-02-08 20:20 15279在WWDC2013中 水果公司把iOS7的中后台多任务单独开出 ... -
实战iOS7之NSURLSession
2014-02-01 20:19 30712NSURLSession VS NSURLConnection ... -
iOS概念之KVO(Key-Value Observing)
2014-01-26 20:21 21807在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通 ... -
实战iOS7之UIDynamics
2014-01-26 14:26 10496最近在看Sam Davies写的iOS7系列文章(http:/ ... -
在iOS App的图标上显示版本信息
2013-12-29 19:46 5638最近读到一篇文章(http://www.merowing.in ... -
构建iOS持续集成平台
2013-09-25 20:33 5444之前写的关于iOS持续集成平台的文章终于在infoQ上发表了, ... -
Object-C的对象模型
2013-09-17 20:04 2441在Object-C的类型结构中,有几个比较重要的概念Objec ... -
UIView的Animation效果
2013-07-05 19:05 23756所谓动画效果,就是会动的画,到iOS App中来说的话,就是各 ... -
iOS使用GameKit构建“Master-Client”网络
2013-07-02 20:34 2137GameKit是iOS SDK中一个常用的框架。其核心功能有3 ... -
Object-C中的块(Block)
2013-06-26 20:22 9238在Object-C中,块的概念 ... -
Object-C动态特性之protocol
2013-06-25 16:11 8616在Object-C中,Protocol被用来定义一组独立于具体 ... -
Object-C中的动态特性Category
2013-06-22 08:41 1732刚接触Object-C哪会儿, ... -
统一iOS客户端和服务器端认证
2013-01-18 21:05 3405最近公司的同事业余时间搞了一个内部的类about. ... -
iOS开发随笔记之 常量声明和NSUserDefaults
2012-12-09 14:19 5086在iOS中,常量声明一般使用2种方式 1、使用C语言的预处理方 ...
相关推荐
在iOS开发中,AVFoundation框架是处理音频和视频的核心组件,包括录音和播放功能。本文将深入探讨如何利用...理解并熟练掌握这些类的使用,有助于构建出具有高质量音频体验的应用,如微信等社交应用中的语音消息功能。
总的来说,通过AVAudioSession、AVAudioRecorder和AVAudioPlayer,我们可以轻松地在iOS应用中实现录音和播放功能,为用户提供类似微信的用户体验。在实际项目中,结合Xcode和Swift或Objective-C进行编码,根据上述...
-- IOS利用AVFoundation框架实现录音和播放 (AVAudioSession AVAudioRecorder AVAudioPlayer) -- IOS之分析网易新闻存储数据 CoreData的使用 增删改查 -- IOS二维码扫描Demo -- 18个 ios 项目源代码 -- iOS通讯录...
这个`ios-AVAudioRecorderDemo.zip`应该是一个示例项目,展示了如何在iOS应用中集成并使用`AVAudioRecorder`进行音频录制。现在我们将详细探讨`AVAudioRecorder`的关键知识点和实现步骤。 1. **初始化...
在iOS开发中,实现原生录音功能是常见的需求,特别是在构建音乐、社交或者教育类应用时。本项目基于Apple的AVFoundation框架,利用其提供的AVAUDIORECORDER类,实现了简单的录音功能。AVFoundation是iOS中处理音频和...
在iOS平台上实现录音功能是一项常见的任务,尤其对于开发者来说,创建具有录音笔功能的应用程序能够为用户提供方便的音频记录体验。以下将详细讲解如何在iOS中实现这一功能,并结合"录音笔demo"这个示例来深入理解。...
而在iOS的AVFoundation中,我们则会使用AVAudioRecorder类来配置录音参数。 接着,录音源文件通常包含一个主循环,用于持续监听音频输入并将其存储到缓冲区。在每次录音时,这个循环会不断读取音频设备的数据,然后...
这个"iOS录音与播放Demo"是一个示例项目,它使用了AVFoundation框架中的AVAudioRecorder类来实现录音,以及AVAudioPlayer类来实现播放。AVFoundation是苹果提供的一套强大的音频处理工具,适用于各种复杂的音频操作...
这个压缩包是专为那些希望深入理解iOS应用录音功能的学生、个人开发者以及公司项目团队设计的。接下来,我们将详细探讨这个源码中的关键知识点。 1. **iOS音频录制框架**: - 这个应用示例很可能是基于Apple的...
这个"录音简单demo"就是一个基本的示例,展示了如何使用原生的iOS API实现录音功能。在这个简单的Demo中,我们将探讨以下几个关键知识点: 1. **AVFoundation框架**:在iOS中,AVFoundation框架是处理音频和视频的...
4. **开始、暂停和停止录音**:使用`AVAudioRecorder`的`record`方法开始录音,`pause`方法暂停,`stop`方法结束录音。`prepareToRecord`方法应在开始录音前调用,以确保所有资源都已准备就绪。 5. **错误处理**:...
通过以上步骤,你可以构建一个基础的iOS录音和播放应用。在"XYRealTimeRecord-master"项目中,应该有更具体的实现细节,包括错误处理、UI集成和可能的性能优化。对这些代码进行学习和实践,将有助于提升你的iOS音频...
本DEMO,"ios-录音 DEMO.zip",提供了一个简单的录音示例,帮助开发者了解如何在iOS应用中集成实时波形图显示功能。这个项目是在GitHub上开源的,可以通过以下链接查看:...
6. 在需要的时候,使用AVAudioPlayer进行录音的回放。 这个过程展示了Unity3D如何通过C#脚本与iOS原生代码交互,利用Objective-C或Swift实现特定于平台的功能,如录音。通过Xcode的插件或者使用Unity的DllImport...
在录音方面,我们将主要用到AVFoundation中的AVAudioRecorder类,它提供了一种简单的方式来记录和编辑音频。 1. **配置录音设置**:在开始录音前,我们需要设置录音的参数,如音频格式(例如AAC或CAF)、采样率、位...
例如,确保在不再使用录音或播放时正确地释放AVAudioRecorder和AVAudioPlayer实例,以防止内存泄漏。 总的来说,"mp3录音播放"涉及了iOS平台上的音频处理,包括录音、音频格式转换和播放。通过Lame库,开发者能够...
这个“ios-AVAudio 语音备忘录.zip”文件提供了一个简易的语音备忘录应用的示例,它实现了录音、暂停、播放功能,并且能够检测录音时的音量,支持本地保存和删除操作。下面我们将详细探讨这些知识点。 1. **...
录音完成后,我们可以使用AVAudioPlayer来播放录音文件。同样,我们需要创建一个AVAudioPlayer实例并设置播放文件的URL: ```swift let audioPlayer = try! AVAudioPlayer(contentsOf: recordingURL) audioPlayer....
在这个项目中,我们主要关注AVAudioRecorder和AVAudioPlayer这两个类,它们分别用于录音和播放。 1. **AVAudioSession**: 在开始处理音频之前,首先需要配置AVAudioSession。这是iOS系统中的音频会话类,它负责管理...
《YZSimpleAudioKit:封装与定制AVAudioPlayer与AVAudioRecorder》 在iOS开发中,音频处理是一项重要的功能,Apple提供了强大的AVFoundation框架,其中包含了AVAudioPlayer和AVAudioRecorder两个核心类,分别用于...