音频录制之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



 

 

 

你可能感兴趣的:(order)