兴趣iOS

声音分贝测量、曲线绘制

2016-12-02  本文已影响195人  沧海的风

先看一张效果图

效果图.jpg

音频可视化效果

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

EZAudio

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

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

上一篇下一篇

猜你喜欢

热点阅读