iOS 使用AVAudioRecorder實現音頻的錄製

      和AVAudioPlayer類似,AVAudioRecorder也是AVFoundtion框架的,而且在結構、屬性上也挺相似。

    1、構建:

  使用方法:

- (id)initWithURL:(NSURL *)url settings:(NSDictionary *)settings error:(NSError **)outError
   參數url是錄製的音頻文件的路徑,注意不是文件存放的文件夾的路徑,是包含文件一起的完整路徑,如: file:///var/mobile/Applications/2EB555A9-C09B-4269-B0B3-F479A39F6784/Documents/recordedFiles/-2118413987.wav。

   settings是一個字典,包含了對於AVAudioRecorder的對象的許多配置信息,關於所包含的鍵值,文檔裏有鏈接。一般的配置如下:

NSDictionary *setting = [[NSDictionary alloc] initWithObjectsAndKeys:
                              [NSNumber numberWithFloat: 44100.0],AVSampleRateKey,
                              [NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
                              [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,
                              [NSNumber numberWithInt: 2], AVNumberOfChannelsKey,
                              [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,
                              [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,nil];

  2、錄製:

   錄製就是調用:

[_audioRecorder prepareToRecord] 
[_audioRecorder record]

prepareToRecord 這個方法會根據上面構建時提供的路徑構建一個音頻文件,如果已經有同名文件,會替換掉之前的。然後這個方法會有一個bool的返回值,如果文件路徑不可使用,會返回NO;如果音頻文件格式是不支持的格式,也會返回NO。所以有必要在這做個判斷。

   但是在prepareToRecord之前需要調整一個屬性,關於應用音頻方面的一些性質的調節:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    [audioSession setActive:YES error:nil];
需要把AVAudioSession 的category設爲AVAudioSessionPlayAndRecord或AVAudioSessionRecord;並且設置active爲YES來激活。在播放的時候,需要把category調回AVAudioSessionPlayback,否則會聲音特別小。

 錄製過程中可以使用pause 方法來暫停,使用stop方法來停止。停止之後,一段錄音就有了。

  對於錄音文件的格式也有一定要求,沒有全部測試,.caf  .wav .aac 是可以的,.mp3是不行的。而且選擇特定格式時,構建時用到的settings中的AVFormatIDKey 需要響應的更改,這個鍵的可選枚舉值在文檔中可以找到。

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章