IPhone之AVAudioRecorder

#import <AVFoundation/AVFoundation.h>  需要引入
 
//获取document目录的路径
- (NSString*) documentsPath {
 if (! _documentsPath) {
  NSArray *searchPaths =
   NSSearchPathForDirectoriesInDomains
   (NSDocumentDirectory, NSUserDomainMask, YES);
  _documentsPath = [searchPaths objectAtIndex: 0];
  [_documentsPath retain];
 }
 return _documentsPath;
}
 
//(document目录的路径)
 NSString *destinationString = [[self documentsPath]
   stringByAppendingPathComponent:filenameField.text];
 NSURL *destinationURL = [NSURL fileURLWithPath: destinationString];
//初始化AVAudioRecorder
 NSError *recorderSetupError = nil;
 AVAudioRecorder audioRecorder = [[AVAudioRecorder alloc] initWithURL:destinationURL
   settings:recordSettings error:&recorderSetupError]; 
 [recordSettings release];

第二个参数  settings是一个容纳键值对的NSDictionary有四种一般的键
1:一般的音频设置
2:线性PCM设置
3:编码器设置
4:采样率转换设置

NSMutableDictionary  需要加入五个设置值(线性PCM)
NSMutableDictionary *recordSettings =
  [[NSMutableDictionary alloc] initWithCapacity:10];
  //1 ID号
  [recordSettings setObject:
   [NSNumber numberWithInt: kAudioFormatLinearPCM] forKey: AVFormatIDKey];
  float sampleRate =
   [pcmSettingsViewController.sampleRateField.text floatValue];
  //2 采样率
  [recordSettings setObject:
   [NSNumber numberWithFloat:sampleRate] forKey: AVSampleRateKey];
  
  //3 通道的数目
  [recordSettings setObject:
   [NSNumber numberWithInt:
    (pcmSettingsViewController.stereoSwitch.on ? 2 : 1)]
   forKey:AVNumberOfChannelsKey];
  int bitDepth =
   [pcmSettingsViewController.sampleDepthField.text intValue];
  
  //4 采样位数  默认 16
  [recordSettings setObject:
   [NSNumber numberWithInt:bitDepth] forKey:AVLinearPCMBitDepthKey];
  
  //5
  [recordSettings setObject:
   [NSNumber numberWithBool:
     pcmSettingsViewController.bigEndianSwitch.on]
    forKey:AVLinearPCMIsBigEndianKey];

  //6 采样信号是整数还是浮点数
  [recordSettings setObject:
   [NSNumber numberWithBool:
     pcmSettingsViewController.floatingSamplesSwitch.on]
    forKey:AVLinearPCMIsFloatKey];

AVAudioRecorder成功创建后,使用他非常直接.它的三个基本方法如下
-(void) startRecording {
 [audioRecorder record];
}
-(void) pauseRecording {
 [audioRecorder pause];
 recordPauseButton.selected = NO;
}
-(void) stopRecording {
 [audioRecorder stop];
}
posted @ 2011-03-11 14:06  子非あ鱼  阅读(4726)  评论(0编辑  收藏  举报