`

使用AVAudioRecorder,AVAudioPlayer构建简单录音笔应用

 
阅读更多
在iOS的基础类库中, 提供了AVFoundation FrameWork,即Audio/Video基础类库,通过使用这个类库,可以非常容易的在应用程序录制,播放视频,音频等。本文将通过一个简单的录音笔应用,介绍如何在iOS应用程序中使用AVAudioRecorder,AVAudioPlayer。录音笔的界面以及功能都非常简单,如下:

1. 当程序启动时,界面会出现录音按钮。
2. 用户点击录音按钮,按钮变色,进入录音状态。
3. 录音状态下,用户点击录音按钮,录音结束,播放按钮出现
4. 用户点击播放按钮,进入播放录音状态,播放录音时,录音按钮不可用。

下面就来一步一步的实现这个简单的录音笔应用:
首先,新起项目,并把AVFoundation FrameWork加入到当前项目中:

然后,创建MainViewController,并引入AVFoundation.h文件,创建AVAduioPlayer和AVAudioRecorder属性,以及界面元素需要的属性,同时定义点击按钮时需要使用的方法:
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@interface MainViewController : UIViewController<AVAudioPlayerDelegate,AVAudioRecorderDelegate>

@property (strong, nonatomic) AVAudioRecorder *audioRecorder;
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;

@property (nonatomic, weak) IBOutlet UIButton *recordButton;
@property (nonatomic, weak) IBOutlet UIButton *playButton;

-(IBAction)recordButtonAction:(id)sender;
-(IBAction)playButtonAction:(id)sender;

@end

```
接着,把UI元素和响应的属性,方法绑定起来:

再接下来,在界面加载(viewDidLoad)的时候,隐藏播放按钮并初始化AvdudioRecorder,初始化Recorder需要2个元素:
* 录制效果配置,主要就是配置录制声音时的比特率,采样率等等,更多具体的内容:[Audio配置]http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVFoundationAudioSettings_Constants/Reference/reference.html#//apple_ref/doc/uid/TP40009937
* 录音保存的文件URL

初始化后,调用[self.audioRecorder prepareToRecord]方法,该方法会配置好Recorder并创建好录音文件。
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.playButton.hidden = YES;
    
    //配置Recorder,
    NSDictionary *recordSetting = [NSDictionary dictionaryWithObjectsAndKeys:
                                   [NSNumber numberWithInt:AVAudioQualityLow],AVEncoderAudioQualityKey,
                                   [NSNumber numberWithInt:16],AVEncoderBitRateKey,
                                   [NSNumber numberWithInt:2],AVNumberOfChannelsKey,
                                   [NSNumber numberWithFloat:44100.0],AVSampleRateKey,
                                   nil];
    //录音文件保存地址的URL
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/record.caf", [[NSBundle mainBundle] resourcePath]]];    
    NSError *error = nil;
    self.audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&error];

    if (error != nil) {
        NSLog(@"Init audioRecorder error: %@",error);
    }else{
        //准备就绪,等待录音,注意该方法会返回Boolean,最好做个成功判断,因为其失败的时候无任何错误信息抛出
        if ([self.audioRecorder prepareToRecord]) {
            NSLog(@"Prepare successful");
        }
    }    
}

配置好Recorder之后,开始,实现录音按钮,录音按钮功能非常简单,只需要判断当前Recorder处于录音状态则调用stop方法结束录音,否则调用record方法开始录音,同时更新UI元素。
-(IBAction)recordButtonAction:(id)sender
{
    if (!self.audioRecorder.recording) {
        self.playButton.hidden = YES;
        [self.audioRecorder record];
        [self.recordButton setImage:[UIImage imageNamed:@"MicButtonPressed.png"] forState:UIControlStateNormal];
    }else {
        self.playButton.hidden = NO;
        [self.audioRecorder stop];
        [self.recordButton setImage:[UIImage imageNamed:@"MicButton.png"] forState:UIControlStateNormal];
    }
}

录音结束之后,播放按钮会出现,接下来实现播放按钮的点击效果,其实现和Record按钮差不多, 判断当前的Player处于播放状态则调用pause方法停止播放,否则,初始化Player,然后调用play方法播放按钮。AVAudioPlayer的初始化非常简单,只需要知道声音文件的URL即可。
-(IBAction)playButtonAction:(id)sender
{
    if (!self.audioPlayer.playing) {
        self.recordButton.hidden = YES;
        NSError *error;
        NSLog(@"%@",self.audioRecorder.url);
        self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:self.audioRecorder.url error:&error];
        self.audioPlayer.delegate = self;
        if (error != nil) {
            NSLog(@"Wrong init player:%@", error);
        }else{
            [self.audioPlayer play];
        }
        [self.playButton setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal];
    }else {        
        self.recordButton.hidden = NO;
        [self.audioPlayer pause];
        [self.playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
    }
}

当声音文件播放结束时,需要通知主程序,这就涉及到使用AVAudioPlayerDelegate,顺道我们也可以实现AVAudioRecorderDelegate以记录Recorder的状态。
#pragma mark audio delegate
-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    NSLog(@"Finsh playing");
    self.recordButton.hidden = NO;
    [self.playButton setImage:[UIImage imageNamed:@"play.png"] forState:UIControlStateNormal];
    
}

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error
{
    NSLog(@"Decode Error occurred");
}

-(void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag
{
    NSLog(@"Finish record!");
}

-(void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error
{
    NSLog(@"Encode Error occurred");
}


That's All! 本文只是对AVAudioRecorder,AVAudioPlayer做了最简单的介绍,更多的内容请参考苹果的开发者文档:

* AVAudioRecorder:http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioRecorder_ClassReference/Reference/Reference.html#//apple_ref/occ/instp/AVAudioRecorder/settings
* AVAudioPlayer:http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html

另外,这儿还有一篇不错的分析iPhone中使用音频的文章:http://www.raywenderlich.com/zh-hans/20608/iphone%E5%BC%80%E5%8F%91%E4%B9%8B%E9%9F%B3%E9%A2%91101-%E7%AC%AC%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9A-%E6%96%87%E4%BB%B6%E5%92%8C%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B

所有的源代码在这儿:https://github.com/xianlinbox/AudioDemo
  • 大小: 697.6 KB
  • 大小: 53.2 KB
  • 大小: 279.8 KB
0
1
分享到:
评论

相关推荐

    IOS利用AVFoundation框架实现录音和播放 (AVAudioSession AVAudioRecorder AVAudioPlayer)

    利用AVAudioRecorder录音 利用AVAudioPlayer播放 AVAudioSession录音权限 简单的录音播放demo,类似微信的按下录音,松开录音完成,并播放。

    IOS利用AVFoundation框架实现录音和播放 AVAudioSession AVAudioRecorder AVAudioPlayer

    利用AVAudioRecorder录音 利用AVAudioPlayer播放 AVAudioSession录音权限 简单的录音播放demo,类似微信的按下录音,松开录音完成,并播放。

    IOS 20个实用例子.zip

    -- IOS利用AVFoundation框架实现录音和播放 (AVAudioSession AVAudioRecorder AVAudioPlayer) -- IOS之分析网易新闻存储数据 CoreData的使用 增删改查 -- IOS二维码扫描Demo -- 18个 ios 项目源代码 -- iOS通讯录...

    ios-ios原生实现录音功能-AVFoundation-AVAudioRecorder.zip

    我在git上也上传了一份https://github.com/yuanjunxiao/ios-AVAudioRecorder-.git

    iOS录音播放方法Demo

    二、使用AVAudioRecorder录音; 三、使用AVAudioPlayer播放,并添加播放动画; 四、使用lame将caf音频转化为mp3; 五、将mp3 转化为 base64编码; 六、查看录音文件大小; 七、删除语音文件;

    YZSimpleAudioKit:AVAudioPlayer 和 AVAudioRecorder 的一些“包装类”或自定义类

    YZSimpleAudioKit 一些用于 AVAudioPlayer 和 AVAudioRecorder 的“包装类”或自定义类。

    ios-AVAudioRecorderDemo.zip

    AVAudioRecorder 的使用演示

    wav音频的录制--&gt;转成amr

    1 使用AVAudioRecorder录音成wav文件 2 为了避免录音启动耗时0 5秒(因为我录音时会有个mic图片的gif 发现显示gif显示被延时0 5秒) 所以 开启子线程做录音的operation 3 为了让可恶的android也能使用 需要将wav &gt...

    ios-音频的录制和播放(或是播放音乐).zip

    音频的录制与播放,进行封装后的单例工具组件。 (1)使用AVAudioRecorder进行录音 (2)使用AVAudioPlayer进行音频播放 SYAudio:https://github.com/potato512/SYAudio

    iOS多媒体音频(下)-录音及其播放的实例

    其中音频的播放控制是使用AVFoundation.framework框架中的AVAudioPlayer播放器对象来实现的,而这里音频的录制则是使用了同样框架下的一个叫AVAudioRecorder的录音机对象来实现,这两个类的用法流程非常类似,类的...

    iOS开发项目- 基于WebSocket的聊天通讯(2)

    其实语言聊天,包含两部分,录音和音乐播放,关于简单语言聊天功能如下图: 录音 在AVFoundation框架中有一个AVAudioRecorder类专门处理录音操作,它同样支持多种音频格式。与AVAudioPlayer类似,你完全可以将它...

    音频的录制和播放 iOS

    作者potato512,源码SYAudio,音频的录制与播放,进行封装后的单例工具组件。(1)使用AVAudioRecorder进行录音(2)使用AVAudioPlayer进行音频播放

    IOS语音聊天实现

    添加AVFoundation Framework 为使用AVAudioRecorder类,我们需要向项目添加AVFoundation framework: 在项目Groups & Files面板上展开Targets 按Control-点击或右击MicBlow 选择Add &gt; Existing Frameworks… 按下...

    iOS 音频录制

    iOS AVFoundation框架下的AVAudioRecorder录音机的实现。

    AudioJz:从ray wenderlich开始

    AudioJz 音频工具箱 0.8 0.7 0.6 深入探索一些 0.5 ...以下是AVAudioPlayer,AVAudioRecorder 0.2 0.1 把Ray Wenderlich的音频教程,从Swift 2更新到Swift 5,并进行适当的修改,调试 PS: 0.2

    简单TOM猫学说话

    简单实现TOM猫学说话 - (void)record { if ([self canRecord]) { NSError *error; NSMutableDictionary *_recordSetting = [[NSMutableDictionary alloc] init]; [_recordSetting setValue:[NSNumber ...

    IOS开发实现录音功能

    AVAudioRecorder *audioRecorder; } @end 在ViewDidLoad中: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame = CGRectMake(100, 100, 100, 100); ; button.b

    iOS音频操作

    播放本地音频、AVAudioRecorder和Audio Queue录制音频、拍照等功能

    iOS 10 App Development Essentials

    96. Recording Audio on iOS 10 with AVAudioRecorder 97. An iOS 10 Speech Recognition Tutorial 98. An iOS 10 Real-Time Speech Recognition Tutorial 99. An Introduction to SiriKit 100. An iOS 10 Example ...

    iOS.9.App.Development.Essentials

    Recording Audio on iOS 9 with AVAudioRecorder Chapter 96. Integrating Twitter and Facebook into iOS 9 Applications Chapter 97. An iOS 9 Social Media Integration Tutorial using ...

Global site tag (gtag.js) - Google Analytics