IOS 实现 AAC格式 录音 录音后自动播放

废话不说了 不知道aac可以百度一下 下面直接上代码,一个h文件 一个m文件 搞定!

#import <AVFoundation/AVFoundation.h>
#import <UIKit/UIKit.h>

@interface AudioRecord : NSObject<AVAudioRecorderDelegate, AVAudioPlayerDelegate>

/**
 *  获取单例对象
 *
 *  @return 返回数据库对象
 */
+(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:0];
    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:16],AVLinearPCMBitDepthKey,   //线性采样位数  8、16、24、32

                              [NSNumber numberWithInt:2],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顺便也解决了 录音后播放声音小的问题。

时间: 2024-09-30 00:46:03

IOS 实现 AAC格式 录音 录音后自动播放的相关文章

ios为了用户隐私安全,禁止自动播放音频文件的解决办法(微信端)

ios为了用户隐私安全,禁止自动播放音频文件 //通过参数给音频设置id和路径 utils = { playAudio: function (id, src) { var audio = $('#' + id); if (audio.attr('src') == undefined) { audio.attr('src', src); } //audio[0].play(); function audioAutoPlay() { audio[0].play(); document.addEven

iOS背景音乐不自动播放

iOS 内置浏览器safari不允许自动播放音乐.我们需要通过WeixinJSBridgeReady()函数实现自动触发 document.addEventListener("WeixinJSBridgeReady", function () { $('audio').play(); }, false); 但是加了上面的代码后在平常开发中还是会偶发这个现象 解决办法:加载完后添加以下逻辑,重新播放一下 wx.ready(function () { $("audio"

html5 -audio-移动端如何自动播放

最近在做一些活动类页面或者类似于易企秀类型的轻应用经常遇到关于audio标签的应用,对于audio相关的常用知识点以及一些相关的问题如下: <audio id="audios" src="xxxx.mp3" autoplay controls="controls"> 您的浏览器不支持 audio 标签. </audio> 不支持audio元素的浏览器会显示标签内文字 audio相关属性: src:音频地址 autoplay

audio在浏览器中自动播放

audio 在浏览器中自动播放 //使用autoplay属性 var src = "./award.wav"; var body = document.getElementsByTagName("body")[0]; if (body.getElementsByTagName("audio").length <= 0) { var audio = document.createElement("audio"); audi

解决手机微信浏览器视频自动播放和默认全屏问题

1.早期因为带宽和流量的因素,移动端浏览器禁止视频自动播放,现在现在流量便宜了.手机硬件越来越好了,部分可支持了2.在移动端浏览器, video 在用户点击播放或者通过API video.play() 触发播放时,会强制以全屏置顶的形式进行播放,设计的初衷可能是因为全屏能提供更好的用户体验 <video controls="controls" src="" id="ckplayer_a1" x5-video-player-type=&quo

js播放wav格式的录音文件

<input type="button" onclick="playSound('wavFileId');" value="play"/> <embed id="wavFileId"        src="c://fileRecord/20140729/006/20140729095707000---Out-006.wav"       width="0"      

unity汤姆猫自动检测录音,不说话自动播放

unity汤姆猫自动检测录音,不说话自动播放 脚本 using System.Collections.Generic; using System.Linq; using UnityEngine; [RequireComponent(typeof(AudioSource))] public class MicrophoneInput : MonoBehaviour { //每秒种产生0.4M数据量 private LinkedList<float> recordData = new Linked

iOS 身份证最后一位是X,输入17位后自动补全X(转)

非原创,转载自http://blog.csdn.net/l2i2j2/article/details/51542028如果身份证最后一位是X,输入17位后自动补全X// textField代理方法 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // string.length为0,表明没有输

iOS音频AAC视频H264编码 推流最佳方案

项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成h264,音频编码成aac *  实现音视频数据的发布,将编码好的音视频数据传输到服务器 2 视频和音频编码方案 视频硬编码需要使用AVAssetWriter,但是他只支持直接将数据编码成h264并写入文件,不提供接口中途获取视频数据处理,我们需要在保存的文件中读出数据 据顶采用软编码,主流开源编解码器Xvid,x264,ffmpeg,Xvid是