音频录制之AVAudioRecorder
#import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface AudioPlayerViewController : UIViewController{ AVAudioPlayer *audioPlayer; AVAudioRecorder *audioRecorder; int recordEncoding; enum { ENC_AAC = 1, ENC_ALAC = 2, ENC_IMA4 = 3, ENC_ILBC = 4, ENC_ULAW = 5, ENC_PCM = 6, } encodingTypes; } - (IBAction) startRecording; - (IBAction) stopRecording; - (IBAction) playRecording; - (IBAction) stopPlaying; - (IBAction)btnclick:(id)sender; @end // M文件 #import "AudioPlayerViewController.h" @implementation AudioPlayerViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. recordEncoding = ENC_AAC; } - (void)dealloc { [audioPlayer release]; [audioRecorder release]; [super dealloc]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(IBAction) startRecording { NSLog(@"startRecording"); [audioRecorder release]; audioRecorder = nil; // Init audio with record capability AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryRecord error:nil]; NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] initWithCapacity:10]; if(recordEncoding == ENC_PCM) { [recordSettings setObject:[NSNumber numberWithInt: kAudioFormatLinearPCM] forKey: AVFormatIDKey]; [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey]; [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey]; [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [recordSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; [recordSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; } else { NSNumber *formatObject; switch (recordEncoding) { case (ENC_AAC): formatObject = [NSNumber numberWithInt: kAudioFormatMPEG4AAC]; break; case (ENC_ALAC): formatObject = [NSNumber numberWithInt: kAudioFormatAppleLossless]; break; case (ENC_IMA4): formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4]; break; case (ENC_ILBC): formatObject = [NSNumber numberWithInt: kAudioFormatiLBC]; break; case (ENC_ULAW): formatObject = [NSNumber numberWithInt: kAudioFormatULaw]; break; default: formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4]; } [recordSettings setObject:formatObject forKey: AVFormatIDKey];//ID [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey];//采样率 [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];//通道的数目,1单声道,2立体声 [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey];//解码率 [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];//采样位 [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey: AVEncoderAudioQualityKey]; } NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", [[NSBundle mainBundle] resourcePath]]]; NSError *error = nil; audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error]; if ([audioRecorder prepareToRecord] == YES){ [audioRecorder record]; }else { int errorCode = CFSwapInt32HostToBig ([error code]); NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode); } NSLog(@"recording"); } -(IBAction) stopRecording { NSLog(@"stopRecording"); [audioRecorder stop]; NSLog(@"stopped"); } -(IBAction) playRecording { NSLog(@"playRecording"); // Init audio with playback capability AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", [[NSBundle mainBundle] resourcePath]]]; NSError *error; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; audioPlayer.numberOfLoops = 0; [audioPlayer play]; NSLog(@"playing"); } -(IBAction) stopPlaying { NSLog(@"stopPlaying"); [audioPlayer stop]; NSLog(@"stopped"); } @end