iOS中录音和播放实现

来源:互联网 发布:域名怎么交易 编辑:程序博客网 时间:2024/05/21 15:44

//首先导入框架后,导入头文件.以下内容为托控件,在storyboard中拖出两个按钮为录音和播放按钮


//创建一个UIViewController在.h文件中写

#import <UIKit/UIKit.h>

#import <AVFoundation/AVFoundation.h>


@interface ViewController :UIViewController


//录音存储路径

@property (nonatomic,strong)NSURL *tmpFile;

//录音

@property (nonatomic,strong)AVAudioRecorder *recorder;

//播放

@property (nonatomic,strong)AVAudioPlayer *player;

//录音状态(是否录音)

@property (nonatomic,assign)BOOL isRecoding;


@end


//在.m文件中写

#import "ViewController.h"

//添加代理

@interface ViewController ()<AVAudioPlayerDelegate>


//录音按钮

@property (weak, nonatomic) IBOutletUIButton *recordButton;


//播放按钮

@property (weak, nonatomic) IBOutletUIButton *playButton;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    //刚打开的时候录音状态为不录音

    self.isRecoding =NO;

    

    //播放按钮不能被点击

    [self.playButtonsetEnabled:NO];

    //播放按钮设置成半透明

    self.playButton.titleLabel.alpha = 0.5;

    

    //创建临时文件来存放录音文件

    self.tmpFile = [NSURLfileURLWithPath:[NSTemporaryDirectory()stringByAppendingString:@"TmpFile"]];

    

    //设置后台播放

    AVAudioSession *session = [AVAudioSessionsharedInstance];

    

   NSError *sessionError;

    [session setCategory:AVAudioSessionCategoryPlayAndRecorderror:&sessionError];

    

    //判断后台有没有播放

   if (session == nil) {

        

       NSLog(@"Error creating sessing:%@", [sessionErrordescription]);

        

    }else {

    

        [sessionsetActive:YESerror:nil];

    

    }

    

}


//录音按钮方法的实现

- (IBAction)startStopRecord:(id)sender {

    

    //判断当录音状态为不录音的时候

   if (!self.isRecoding) {

        //将录音状态变为录音

       self.isRecoding =YES;

        

        //将录音按钮变为停止

        [self.recordButtonsetTitle:@"停止"forState:UIControlStateNormal];

        

        //播放按钮不能被点击

        [self.playButtonsetEnabled:NO];

       self.playButton.titleLabel.alpha =0.5;

        

        //开始录音,将所获取到得录音存到文件里

        self.recorder = [[AVAudioRecorderalloc] initWithURL:_tmpFilesettings:nilerror:nil];

        

       //准备记录录音

        [_recorderprepareToRecord];

        

        //启动或者恢复记录的录音文件

        [_recorderrecord];

        

       _player = nil;

        

    }else {

    

        //录音状态点击录音按钮 停止录音

       self.isRecoding =NO;

        [self.recordButtonsetTitle:@"录音"forState:UIControlStateNormal];

        

        //录音停止的时候,播放按钮可以点击

        [self.playButtonsetEnabled:YES];

        [self.playButton.titleLabelsetAlpha:1];

        

       //停止录音

        [_recorderstop];

        

       _recorder = nil;

        

        

       NSError *playError;

       self.player = [[AVAudioPlayeralloc] initWithContentsOfURL:_tmpFileerror:&playError];

        //当播放录音为空,打印错误信息

       if (self.player ==nil) {

           NSLog(@"Error crenting player: %@", [playErrordescription]);

        }

       self.player.delegate =self;

    

    }

    

}


//播放按钮方法的实现

- (IBAction)playPause:(id)sender {

    

    //判断是否正在播放,如果正在播放

   if ([self.playerisPlaying]) {

       //暂停播放

        [_playerpause];

        

        //按钮显示为播放

        [self.playButtonsetTitle:@"播放"forState:UIControlStateNormal];

        

    }else {

    

       //开始播放

        [_playerplay];

        

       //

        [self.playButtonsetTitle:@"暂停"forState:UIControlStateNormal];

    

    }

    

}


//当播放结束后调用这个方法

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag

{

    //按钮标题变为播放

    [self.playButtonsetTitle:@"播放"forState:UIControlStateNormal];

}




0 0