IOS 实现 AAC格式 录音 录音后自动播放
废话不说了 不知道aac可以百度一下 下面直接上代码,一个h文件 一个m文件 搞定!
#import <AVFoundation/AVFoundation.h>
#import <UIKit/UIKit.h> @interface AudioRecord : NSObject<AVAudioRecorderDelegate, AVAudioPlayerDelegate> /**
* 获取单例对象
*/
+(AudioRecord *)shareAudioRecord; /**
* 将要录音
*
* @return <#return value description#>
*/
- (BOOL)canRecord; /**
* 停止录音
*/
- (void)stopRecord; /**
* 开始录音
*/
- (void)onStatrRecord; /**
* 初始化音频检查
*/
-(void)initRecordSession; /**
* 初始化文件存储路径
*
* @return <#return value description#>
*/
- (NSString *)audioRecordingPath; /**
* 录音器
*/
@property (nonatomic, retain) AVAudioRecorder *audioRecorder; /**
* 录音播放器
*/
@property (nonatomic, retain) AVAudioPlayer *audioPlayer; @end
下面是m文件
//
// AudioRecord.m
// audio #import "AudioRecord.h"
@implementation AudioRecord : NSObject +(AudioRecord *)shareAudioRecord{
static AudioRecord *sharedAccountManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
} /**
* 设置录制的音频文件的位置
*
* @return <#return value description#>
*/
- (NSString *)audioRecordingPath{ NSString *result = nil;
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsFolde = [folders objectAtIndex:];
result = [documentsFolde stringByAppendingPathComponent:@"Recording.aac"];
return (result); } /**
* 在初始化AVAudioRecord实例之前,需要进行基本的录音设置
*
* @return <#return value description#>
*/
- (NSDictionary *)audioRecordingSettings{ NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithFloat:44100.0],AVSampleRateKey , //采样率 8000/44100/96000 [NSNumber numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey, //录音格式 [NSNumber numberWithInt:],AVLinearPCMBitDepthKey, //线性采样位数 8、16、24、32 [NSNumber numberWithInt:],AVNumberOfChannelsKey, //声道 1,2 [NSNumber numberWithInt:AVAudioQualityLow],AVEncoderAudioQualityKey, //录音质量 nil];
return (settings);
} /**
* 停止音频的录制
*
* @param recorder <#recorder description#>
*/
- (void)stopRecordingOnAudioRecorder:(AVAudioRecorder *)recorder{
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil]; //此处需要恢复设置回放标志,否则会导致其它播放声音也会变小
[session setActive:YES error:nil];
[recorder stop];
} /**
* @param recorder <#recorder description#>
* @param flag <#flag description#>
*/
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag{ if (flag == YES) {
NSLog(@"录音完成!");
NSError *playbackError = nil;
NSError *readingError = nil;
NSData *fileData = [NSData dataWithContentsOfFile:[self audioRecordingPath] options:NSDataReadingMapped error:&readingError]; AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithData:fileData
error:&playbackError]; self.audioPlayer = newPlayer; if (self.audioPlayer != nil) {
self.audioPlayer.delegate = self;
if ([self.audioPlayer prepareToPlay] == YES &&
[self.audioPlayer play] == YES) {
NSLog(@"开始播放音频!");
} else {
NSLog(@"不能播放音频!");
}
}else {
NSLog(@"播放失败!");
} } else {
NSLog(@"录音过程意外终止!");
}
self.audioRecorder = nil;
} /**
* 初始化音频检查
*/
-(void)initRecordSession
{
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[session setActive:YES error:nil]; } /**
* 开始录音
*/
- (void)onStatrRecord
{ /**
* 检查权限
*/
if (![self canRecord])
{ [[[UIAlertView alloc] initWithTitle:nil
message:[NSString stringWithFormat:@"应用需要访问您的麦克风。请启用麦克风!"]
delegate:nil
cancelButtonTitle:@"同意"
otherButtonTitles:nil] show];
return;
} [self initRecordSession]; NSError *error = nil;
NSString *pathOfRecordingFile = [self audioRecordingPath];
NSURL *audioRecordingUrl = [NSURL fileURLWithPath:pathOfRecordingFile];
AVAudioRecorder *newRecorder = [[AVAudioRecorder alloc]
initWithURL:audioRecordingUrl
settings:[self audioRecordingSettings]
error:&error];
self.audioRecorder = newRecorder;
if (self.audioRecorder != nil) {
self.audioRecorder.delegate = self;
if([self.audioRecorder prepareToRecord] == NO){
return;
} if ([self.audioRecorder record] == YES) { NSLog(@"录音开始!"); [self performSelector:@selector(stopRecordingOnAudioRecorder:)
withObject:self.audioRecorder
afterDelay:10.0f]; } else {
NSLog(@"录音失败!");
self.audioRecorder =nil;
}
} else {
NSLog(@"auioRecorder实例录音器失败!");
}
} /**
* 停止录音
*/
- (void)stopRecord{ if (self.audioRecorder != nil) {
if ([self.audioRecorder isRecording] == YES) {
[self.audioRecorder stop];
}
self.audioRecorder = nil;
} if (self.audioPlayer != nil) {
if ([self.audioPlayer isPlaying] == YES) {
[self.audioPlayer stop];
}
self.audioPlayer = nil;
}
} /**
* 将要录音
*
* @return <#return value description#>
*/
- (BOOL)canRecord
{
__block BOOL bCanRecord = YES;
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) { [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) { if (granted) { bCanRecord = YES; } else { bCanRecord = NO; } }]; }
}
return bCanRecord;
} @end
转载请注明:http://www.cnblogs.com/wangmars/ 以上也综合网上大牛的智慧
感谢http://www.cnblogs.com/hanjun/archive/2012/10/30/2747159.html顺便也解决了 录音后播放声音小的问题。
IOS 实现 AAC格式 录音 录音后自动播放的更多相关文章
- egret 篇——关于ios环境下微信浏览器的音频自动播放问题
前段时间公司突然想用egret(白鹭引擎)做一个金币游戏,大半个月边看文档边写吭哧吭哧也总算是弄完了.期间遇到一个问题,那就是ios环境下微信浏览器的音频自动播放问题. 个人感觉吧,egret自己封装 ...
- JavaScript一个页面中有多个audio标签,其中一个播放结束后自动播放下一个,audio连续播放
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 解决ios下的微信页面背景音乐无法自动播放问题
在做各种html5场景页面的时候,插入背景音乐是一个很普遍的需求,我们都知道,ios下的safari是无法自动播放音乐的,以至于现在行程一种认知,ios是没有办法自动播放媒体资源的,这个认知其实是错误 ...
- 在ios中微信video和audio无法自动播放解决方案
WeixinJSBridgeReady页面初始化的时候会执行 document.addEventListener("WeixinJSBridgeReady", function ( ...
- iOS 疑难杂症— — 收到推送显示后自动消失的问题
声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 问题 正在支持 Remote Noti ...
- ios上视频与音乐合成后出现播放兼容问题的解决方法
近期EasyDarwin开源流媒体团队EasyVideoRecorder小组同学Carl在支持一款短视频应用上线时,遇到一个问题:我们在IOS上合成"图片+音乐"成为视频之后,在P ...
- 解决audio 在部分移动端浏览器不能自动播放(目前包括ios、微博)
问题描述:项目需要在页面加载完成后自动播放音乐,但在ios中却无法自动播放,需要用户主动触发 解决办法: $('html').one('touchstart',function(){ document ...
- iOS背景音乐不自动播放
iOS 内置浏览器safari不允许自动播放音乐.我们需要通过WeixinJSBridgeReady()函数实现自动触发 document.addEventListener("WeixinJ ...
- video 安卓ios系统 浏览器 全屏播放以及自动播放的问题
ios自动播放 <body onload="load()"> <div class="result_box"> <div clas ...
随机推荐
- 认识SuperSocket 1.6.4
SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,由江振宇先生开发,之所以选用它是因为一下几点恰好复合项目需求: 开源,基于Apache 2.0协议,可以免费使用到商业项目. 高 ...
- Adroid学习系列-入门(1)
1. 安装 安装Eclipse,安装Adroid插件.安装Adroid SDK. 2. 项目目录说明 2.1. 建立Adroid项目 与一般的Java项目一样 )src文件夹是项目的所 ...
- java中子类与父类中隐含的this引用的分析
/* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} pub ...
- 编写高质量JS代码的68个有效方法(五)
No.21.使用apply方法通过不同数量的参数调用函数 Tips: 使用apply方法自定一个可计算的参数数组来调用可变参数的函数 使用apply方法的第一个参数给可变参数的方法提供一个接收者 // ...
- iOS-多线程-GCD
一. 名词解释: 1. 进程和线程 进程是指在系统中正在运行的一个应用程序.每个进程之间都是独立的,每个进程均运行在期专用而且受到保护的内存空间中. 线程是指一个进程想要执行任务,就必须要有线程.线程 ...
- Direct3D11学习:(九)绘制基本几何体
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct3D中很多复杂的几何效果都是由基本的几何体组合而成的,这篇文章中,我们来学习集中常见的基本几何体的绘 ...
- CSS程序思想
CSS的设计思想,比如:CSS预处理器.CSS对像(OOCSS).SMACSS.Atomic设计和OrganicCSS等 一.CSS预处理器最重要的功能: 1.连接: ...
- MagicalRecord,一个简化CoreData操作的工具库
简介 项目主页:https://github.com/magicalpanda/MagicalRecord 实例下载:https://github.com/ios122/MagicalRecord 在 ...
- eclipse svn插件安装方法
eclipse svn插件安装方法 使用dropins安装插件 从Eclipse3.5开始,安装目录下就多了一个dropins目录.只要将插件解压后拖到该目录即可安装插件.比如安装svn插件subcl ...
- Excel大数据量分段导入到Oracle
客户需要将一个具有2W多条数据的Excel表格中的数据导入到Oracle数据库的A表中,开始采用的是利用Oledb直接将数据读入到DataTable中,然后通过拼接InserInto语句来插入到数据库 ...