EZAudio的简单使用

EZAudio是一款兼容iOS及OSX的,非常强大的第三方波形绘制第三方库

传送门-<a href='https://github.com/syedhali/EZAudio#EZAudioPlayer'>https://github.com/syedhali/EZAudio#EZAudioPlayer</a>

该库的主要组件如下

EZAudioDevice
一个有用的类获取所有可用的电流和输入/输出任何苹果设备。EZMicrophone和EZOutput用它来直接声音/从不同的硬件组件。
EZMicrophone
接管设备麦克风,通过代理来传输你想要的数据
EZOutput
接管设备扬声器,通过代理来传输你想要的数据
EZAudioFile
读取音频文件会用到这个类
EZAudioPlayer
播放音频会用到这个
EZRecorder
录制音频会用到这个
EZAudioPlot
基于图形核心的视图基类
EZAudioPlotGL
基于OpenGL的视图基类

波形图的View,使用EZAudioPlot和AudioPlotGL这两个类
EZAudioPlot继承自UIView
EZAudioPlotGL继承自GLKView
<b>Tips:这两个都是基类,一定要写一个类继承自这俩个类的其中一个才能使用</b>

//错误写法,因为EZAudioPlotGL是基类不能直接使用
@property (nonatomic, strong) EZAudioPlotGL *audioPlot;
//正确写法
//1.写一个类继承自EZAudioPlot或者EZAudioPlotGL
#import "EZAudio.h"
@interface WaveView : EZAudioPlot

@end

//2.用新的类定义对象
#import "WaveView.h"
@interface ViewController ()<EZMicrophoneDelegate>
@property (nonatomic, strong) WaveView *waveView;
@end
1、懒加载生成视图
- (WaveView *)waveView {
    if(!_waveView) {
        AVAudioSession *session = [AVAudioSession sharedInstance];
        NSError *error;
        [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
        if (error) {
            NSLog(@"Error setting up audio session category: %@", error.localizedDescription);
        }
        [session setActive:YES error:&error];
        if (error) {
            NSLog(@"Error setting up audio session active: %@", error.localizedDescription);
        }
        _waveView = [[WaveView alloc] initWithFrame:CGRectMake(0, 100, kScreenWidth, 200)];
        _waveView.backgroundColor = [UIColor colorWithRed:0.569 green:0.82 blue:0.478 alpha:1.0];
        
        //声波颜色
        _waveView.color = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
        _waveView.plotType = EZPlotTypeRolling;//声波类型
        _waveView.shouldFill = YES;
        _waveView.shouldMirror = YES;
        //创建麦克风
        self.microphone = [EZMicrophone microphoneWithDelegate:self];
        //设置输入设备
        [self.microphone setDevice:[[EZAudioDevice inputDevices] firstObject]];
    }
    return _waveView;
}

2、创建按钮来控制

- (UIButton *)startBtn {
    if(!_startBtn) {
        _startBtn = [[UIButton alloc] initWithFrame:CGRectMake(kScreenWidth*0.5-50, kScreenHeight-200, 100, 100)];
        _startBtn.layer.cornerRadius = 50;
        _startBtn.layer.masksToBounds = true;
        _startBtn.backgroundColor = [UIColor blueColor];
        [_startBtn setTitle:@"点击录音" forState:UIControlStateNormal];
        [_startBtn setTitle:@"松开停止" forState:UIControlStateHighlighted];
        [_startBtn addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchDown];
        [_startBtn addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside];
    }
    return _startBtn;
}

3、按钮相关方法

- (void)start{
    NSLog(@"开始");
    [self.microphone startFetchingAudio];
}

- (void)stop{
    NSLog(@"结束");
    [self.microphone stopFetchingAudio];
}

4、麦克风相关代理

#pragma mark - 麦克风代理
//获取buffer流的音频数据信息
- (void)microphone:(EZMicrophone *)microphone hasAudioReceived:(float **)buffer withBufferSize:(UInt32)bufferSize
withNumberOfChannels:(UInt32)numberOfChannels {
     //线程安全的
    //buffer[0]是左声道 。buffer[1]是右声道
    __weak typeof (self) weakSelf = self;
    dispatch_async(dispatch_get_main_queue(), ^{
        [weakSelf.waveView updateBuffer:buffer[0] withBufferSize:bufferSize];
    });
}

//------------------------------------------------------------------------------
//麦克风的AudioStreamBasicDescription流。这是非常有用的
//当配置EZRecorder或告诉另一个组件/ /音频格式类型。
- (void)microphone:(EZMicrophone *)microphone hasAudioStreamBasicDescription:(AudioStreamBasicDescription)audioStreamBasicDescription {

    [EZAudioUtilities printASBD:audioStreamBasicDescription];
}

5、ViewDidLoad中初始化

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.view addSubview:self.waveView];
    [self.view addSubview:self.startBtn];
}
点击录音
松开停止

以上,欢迎指正
有空再细化
have fun :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,029评论 4 62
  • 这两天一直在听养生风水课程,所以不再总结里面提及这些话题了,那说点啥呢?说点个人的一个成长业绩吧。 最近公司有一批...
    智盛心法阅读 931评论 0 0
  • 今天上班了,孩子跟着我一起出门找同学玩,我都走出很远了。孩子又跟上来说同学不在家可不可以把家里钥匙给他,我想起以前...
    明懿妈妈阅读 198评论 0 0
  • DAY 20 & 21作业查阅 DAY8 - DAY19 的同学优秀作业(助教稍后会整理提供),写出自己具体学到了...
    王小锤子阅读 243评论 0 0
  • 爷爷今年70岁了,古稀之年的他依然身体健康,精气神特好,从来没有觉得身体不舒服。妈妈说,爷爷身体健康平平安安是我的...
    嗯行好没问题阅读 431评论 5 4