美文网首页兴趣iOS
声音分贝测量、曲线绘制

声音分贝测量、曲线绘制

作者: 沧海的风 | 来源:发表于2016-12-02 13:36 被阅读195次

先看一张效果图

效果图.jpg

音频可视化效果

最上面是音频可视化效果图,参考资料:

EZAudio

一个用于iOS和OS X开发的音频可视化框架,基于高性能、低延迟的AudioUnits API,只需要简单地导入,并提供了使用Objective-C语言编写的易于使用的API,而不是纯粹的C语言。EZAudio提供了六个音频组件和两个界面组件:

  • EZAudioDevice:用于在任何苹果设备上获取所有当前可用的输入/输出的实用类。EZMicrophone和EZOutput两个类使用它来指导不同硬件组件的音频输入/输出。
  • EZMicrophone:从默认设备的麦克风提供其音频数据代理的麦克风类。
  • EZOutput:可以播放任何由数据源提供的音频的输出类。
  • EZAudioFile:通过音频文件读取/查找音频并提供使用回调函数的音频文件类。
  • EZAudioPlayer:AVAudioPlayer的替代品,与EZAudioFile和EZOutput两个类共同实现了在硬件设备上对任何音频文件的稳定播放。
  • EZRecorder:提供将任何数据源写入音频文件的简单快捷方法的记录类。
  • EZAudioPlot:一个基于核芯显卡将任何浮点型数组可视化处理成缓冲区或滚动点的音频波形绘制组件。
  • EZAudioPlotGL:一个基于OpenGL将任何浮点型数组可视化处理成缓冲区或滚动点的GPU加速音频波形绘制组件。

ZLHistogramAudioPlot

音频可视化库,使用EZAudio

声音分贝值

  /* 声音测量*/
- (void)levelTimerCallback:(NSTimer *)timer {
    [self.recorder updateMeters]; // 更新测量数据,注意只有meteringEnabled为YES此方法才可用

    float   level;                // The linear 0.0 .. 1.0 value we need.
    float   minDecibels = - 80.0f; // Or use -60dB, which I measured in a silent room.
    float   decibels    = [self.recorder averagePowerForChannel:0];

    if (decibels < minDecibels) {
        level = 0.0f;
    } else if (decibels >= 0.0f) {
        level = 1.0f;
    } else {
        float   root            = 2.0f;
        float   minAmp          = powf(10.0f, 0.05f * minDecibels);
        float   inverseAmpRange = 1.0f / (1.0f - minAmp);
        float   amp             = powf(10.0f, 0.05f * decibels);
        float   adjAmp          = (amp - minAmp) * inverseAmpRange;
  
        level = powf(adjAmp, 1.0f / root);
    }

    /* level 范围[0 ~ 1], 转为[0 ~120] 之间 */
    dispatch_async(dispatch_get_main_queue(), ^{
        NSString *valueString = [NSString stringWithFormat:@"%.0f", level*120];
        NSString *string = [NSString stringWithFormat:@"%@ dB",valueString];
        NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:string];
        NSRange range2 = [string rangeOfString:valueString];
        [str addAttribute:NSFontAttributeName value:DinCondMedium(72) range:range2];
    
        if (_timeCount%10 == 0) {
            dbDescLabel.attributedText = str;
        }
        _timeCount++;
      
        if (self.decibeLineArray.count > kScreenWidth) {
            [self.decibeLineArray removeObjectAtIndex:0];
        }
        [self.decibeLineArray addObject:[NSString stringWithFormat:@"%.0f",level*120/167*18*5]];
        self.graphView.frame = CGRectMake(10, kScreenHeight-200, self.decibeLineArray.count, 180);
      [self.graphView setArray:self.decibeLineArray]; // 曲线数组设置
    });
}

曲线动画

GraphView

Demo地址 Demo

相关文章

  • 声音分贝测量、曲线绘制

    先看一张效果图 音频可视化效果 最上面是音频可视化效果图,参考资料: EZAudio 一个用于iOS和OS X开发...

  • 01_UI绘制流程及原理

    ===============ui绘制 测量: 布局: 绘制 总结 测量: 自定义viewgroup onMeas...

  • PPT版式设计第18期:PPT中的曲线设计

    今天和大家聊聊PPT中的曲线设计。 上图中的曲线是用PPT绘制的,也是本例设计的重点技能,曲线弧形的绘制,那绘制这...

  • 我在成长教学设计

    1.能够收集从出生到现在的成长证据; 能够测量身高和体重; 能够根据收集的数据绘制身高、体重曲线图; 能够根据图表...

  • python可视化笔记

    1、绘制多个subplot 绘制多个brand的模型的auc、pr曲线图: 绘制曲线,3个brand、3种算法,因...

  • 使用贝塞尔曲线绘制水波纹

    示例: 思路: 使用贝塞尔曲线绘制正弦曲线;使用CAShapeLayer绘制形状;使用CADisplayLink做...

  • AndroidUI绘制流程,一步一步深入源码解析(三)

    view的测量、布局、绘制 根据(二)中分析,我们知道view的测量、布局、绘制分别调用了performMeasu...

  • 绘制曲线

    如果游戏中有个飞行子弹轨迹出了问题那咋解决呢?通常来说,直观看到曲线后,就能定位问题那如何看到曲线呢? 将每个x对...

  • 黑与光

    任何引起不悦情绪的声音都是噪声,即使它低于相应的分贝值,因为人心的测量都是随性的的,无声胜有声和有声似无声在不同的...

  • R语言可视化(三十八):ROC曲线图绘制

    38. ROC曲线图绘制 清除当前环境中的变量 设置工作目录 使用ROCR包绘制ROC曲线 使用pROC包绘制RO...

网友评论

    本文标题:声音分贝测量、曲线绘制

    本文链接:https://www.haomeiwen.com/subject/dyifmttx.html