IOS 实现 AAC格式 录音 录音后自动播放
生活随笔
收集整理的這篇文章主要介紹了
IOS 实现 AAC格式 录音 录音后自动播放
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
廢話不說(shuō)了 不知道aac可以百度一下 下面直接上代碼,一個(gè)h文件 一個(gè)m文件 搞定!
#import <AVFoundation/AVFoundation.h> #import <UIKit/UIKit.h> @interface AudioRecord : NSObject<AVAudioRecorderDelegate, AVAudioPlayerDelegate> /** * 獲取單例對(duì)象 */ +(AudioRecord *)shareAudioRecord; /** * 將要錄音 * * @return <#return value description#> */ - (BOOL)canRecord; /** * 停止錄音 */ - (void)stopRecord; /** * 開(kāi)始錄音 */ - (void)onStatrRecord; /** * 初始化音頻檢查 */ -(void)initRecordSession; /** * 初始化文件存儲(chǔ)路徑 * * @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;
}
/**
* 設(shè)置錄制的音頻文件的位置
*
* @return <#return value description#>
*/
- (NSString *)audioRecordingPath{
NSString *result = nil;
NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsFolde = [folders objectAtIndex:0];
result = [documentsFolde stringByAppendingPathComponent:@"Recording.aac"];
return (result);
}
/**
* 在初始化AVAudioRecord實(shí)例之前,需要進(jìn)行基本的錄音設(shè)置
*
* @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:16],AVLinearPCMBitDepthKey, //線性采樣位數(shù) 8、16、24、32
[NSNumber numberWithInt:2],AVNumberOfChannelsKey, //聲道 1,2
[NSNumber numberWithInt:AVAudioQualityLow],AVEncoderAudioQualityKey, //錄音質(zhì)量
nil];
return (settings);
}
/**
* 停止音頻的錄制
*
* @param recorder <#recorder description#>
*/
- (void)stopRecordingOnAudioRecorder:(AVAudioRecorder *)recorder{
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:nil]; //此處需要恢復(fù)設(shè)置回放標(biāo)志,否則會(huì)導(dǎo)致其它播放聲音也會(huì)變小
[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(@"開(kāi)始播放音頻!");
} else {
NSLog(@"不能播放音頻!");
}
}else {
NSLog(@"播放失?。?);
}
} else {
NSLog(@"錄音過(guò)程意外終止!");
}
self.audioRecorder = nil;
}
/**
* 初始化音頻檢查
*/
-(void)initRecordSession
{
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
[session setActive:YES error:nil];
}
/**
* 開(kāi)始錄音
*/
- (void)onStatrRecord
{
/**
* 檢查權(quán)限
*/
if (![self canRecord])
{
[[[UIAlertView alloc] initWithTitle:nil
message:[NSString stringWithFormat:@"應(yīng)用需要訪問(wèn)您的麥克風(fēng)。請(qǐng)啟用麥克風(fēng)!"]
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(@"錄音開(kāi)始!");
[self performSelector:@selector(stopRecordingOnAudioRecorder:)
withObject:self.audioRecorder
afterDelay:10.0f];
} else {
NSLog(@"錄音失敗!");
self.audioRecorder =nil;
}
} else {
NSLog(@"auioRecorder實(shí)例錄音器失?。?);
}
}
/**
* 停止錄音
*/
- (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
轉(zhuǎn)載請(qǐng)注明:http://www.cnblogs.com/wangmars/ 以上也綜合網(wǎng)上大牛的智慧
感謝http://www.cnblogs.com/hanjun/archive/2012/10/30/2747159.html順便也解決了 錄音后播放聲音小的問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的IOS 实现 AAC格式 录音 录音后自动播放的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: STM32F0xx_RTC实时时钟配置详
- 下一篇: http免费升级https 攻略(超简单