录制音频(AVAudioRecorder)for iOS

由于本人没有进行过专门的录制音频的项目开发,所以这里只是能完成一个可以录音的小demo。so,首先说一下苹果的API,AVFounditon.framework下的AVAudioRecorder。

AVAudioRecorder和AVAudioPlayer类似,功能类似于一个录音器,使用AVAudioRecorder录制视频十分简单。一般需要三步:

1、创建AVAudioRecorder对象,需要注意的是在创建AVAudioRecorder之前,需要准备一个NSDictiion的对象,对象中封装音频设置相关的音频信息。具体的key有AVFormatIDKey(音频格式)、AVSampleRateKey(采样率)、AVNumberOfChannelsKey(声道数)等,具体参照苹果的文档。关于声音有关的知识,只能求助于度娘了。

2、监听录制完成和被中断的事件。设置AVAudioRecorder代理,这里需要说明的是ios9已经废弃了AVAudioRecorder的中断代理方法,改用AVAudioSession的代理方法。

3、调用record方法录音。播放录音结果,用AVAudioPlayer。


具体实现

1、导入AVFounditon头文件,#import<Foundation/Foundation.h>

2、设置音频会话,并设置音频类别和激活当前音频会话

- (void)viewDidLoad {

    [superviewDidLoad];

    [self.recorderBtnsetBackgroundImage:recordImageforState:UIControlStateNormal];

    //获取当前应用的音频会话

    AVAudioSession * audioSession = [AVAudioSessionsharedInstance];

    //设置音频类别,PlayAndRecord——这说明当前音频会话即可播放、也可录制

    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecorderror: nil];

    //激活当前应用的音频会话

    [audioSessionsetActive:YESerror: nil];

}

3、创建AVAudioRecorder和AVAudioPlayer,这里需要注意:这两个对象要设置为全局变量,要不然录音不成功

<1>设置NSDictionary

// 创建一个NSDictionary,用于保存录制属性

NSMutableDictionary *recordSettings = [[NSMutableDictionaryalloc] init];

// 设置录制音频的格式

[recordSettings setObject:[NSNumbernumberWithInt:kAudioFormatLinearPCM]

                          forKey: AVFormatIDKey];

NSString* sampleRate = [self.sampleRateSegtitleForSegmentAtIndex:

                               self.sampleRateSeg.selectedSegmentIndex];

// 设置录制音频的采样率

[recordSettingssetObject:[NSNumbernumberWithFloat:

                                   sampleRate.floatValue]forKey: AVSampleRateKey];

// 设置录制音频的通道数

[recordSettingssetObject:

         [NSNumbernumberWithInt:(self.stereoSwitch.on ?2 : 1)] forKey:AVNumberOfChannelsKey];

NSString* bitDepth = [self.bitDeptSegtitleForSegmentAtIndexself.bitDeptSeg.selectedSegmentIndex];

// 设置录制音频的每个样点的位数

[recordSettingssetObject: [NSNumbernumberWithInt:bitDepth.intValueforKey:AVLinearPCMBitDepthKey];

// 设置录制音频采用高位优先的记录格式

[recordSettingssetObject:[NSNumbernumberWithBool:YESforKey:AVLinearPCMIsBigEndianKey];

// 设置采样信号采用浮点数

[recordSettingssetObject:[NSNumbernumberWithBool:YESforKey:AVLinearPCMIsFloatKey];


<2>创建对象并设置代理,实现代理方法

// 初始化AVAudioRecorder

audioRecorder = [[AVAudioRecorderalloc] initWithURL:destinationURL settings:recordSettings error:&recorderSetupError];

audioRecorder.delegate = self;


<3>录制音频,在音频没有准备好的时候也会默认调用prepareToRecord方法

[audioRecorder record];






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值