EZAudio的簡單使用

EZAudio是一款兼容iOS及OSX的,非常強(qiáng)大的第三方波形繪制第三方庫

傳送門-<a >https://github.com/syedhali/EZAudio#EZAudioPlayer</a>

該庫的主要組件如下

EZAudioDevice
一個(gè)有用的類獲取所有可用的電流和輸入/輸出任何蘋果設(shè)備。EZMicrophone和EZOutput用它來直接聲音/從不同的硬件組件。
EZMicrophone
接管設(shè)備麥克風(fēng),通過代理來傳輸你想要的數(shù)據(jù)
EZOutput
接管設(shè)備揚(yáng)聲器,通過代理來傳輸你想要的數(shù)據(jù)
EZAudioFile
讀取音頻文件會(huì)用到這個(gè)類
EZAudioPlayer
播放音頻會(huì)用到這個(gè)
EZRecorder
錄制音頻會(huì)用到這個(gè)
EZAudioPlot
基于圖形核心的視圖基類
EZAudioPlotGL
基于OpenGL的視圖基類

波形圖的View,使用EZAudioPlot和AudioPlotGL這兩個(gè)類
EZAudioPlot繼承自UIView
EZAudioPlotGL繼承自GLKView
<b>Tips:這兩個(gè)都是基類,一定要寫一個(gè)類繼承自這倆個(gè)類的其中一個(gè)才能使用</b>

//錯(cuò)誤寫法,因?yàn)镋ZAudioPlotGL是基類不能直接使用
@property (nonatomic, strong) EZAudioPlotGL *audioPlot;
//正確寫法
//1.寫一個(gè)類繼承自EZAudioPlot或者EZAudioPlotGL
#import "EZAudio.h"
@interface WaveView : EZAudioPlot

@end

//2.用新的類定義對(duì)象
#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;
        //創(chuàng)建麥克風(fēng)
        self.microphone = [EZMicrophone microphoneWithDelegate:self];
        //設(shè)置輸入設(shè)備
        [self.microphone setDevice:[[EZAudioDevice inputDevices] firstObject]];
    }
    return _waveView;
}

2、創(chuàng)建按鈕來控制

- (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:@"點(diǎn)擊錄音" 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、按鈕相關(guān)方法

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

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

4、麥克風(fēng)相關(guān)代理

#pragma mark - 麥克風(fēng)代理
//獲取buffer流的音頻數(shù)據(jù)信息
- (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];
    });
}

//------------------------------------------------------------------------------
//麥克風(fēng)的AudioStreamBasicDescription流。這是非常有用的
//當(dāng)配置EZRecorder或告訴另一個(gè)組件/ /音頻格式類型。
- (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];
}
點(diǎn)擊錄音
松開停止

以上,歡迎指正
有空再細(xì)化
have fun :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容