Android麦克风音量表

时间:2012-12-06 05:52:37

标签: java android microphone

我正在编写一个应用程序,需要获得麦克风级别才能创建声级计。我发现了这个:Android Media Player Decibel Reading。我仍然需要创建一个仪表来显示当前水平,100%的交易。所以一个条形图越高越好它就会变得更红。只需获取显示级别的代码就很棒。

在上面的链接中有一种获取当前分贝读数的方法,但是它似乎需要在一个单独的线程中运行并不断更新它。我正在读VU表,但不知道从哪里开始。

提前致谢!

1 个答案:

答案 0 :(得分:2)

好的,我假设您正在使用您在问题中链接的代码。

因此,根据振幅值,此仪表必须随时改变其大小和颜色。

要绘制形状,请扩展View类并覆盖onDraw方法,如下所示

float x,y; //CONSTANTS FOR WHERE YOU WANT YOUR BAR TO BE
float baseWidth; // This is the width of one block. 
                 //Number of blocks together will be your rectangle
float nwidth;     //This is the number of blocks varying according to amplitude
float height;    //CONSTANT HEIGHT
Paint color=new Paint();     

//For drawing meter
public void onDraw(Canvas c){
  changeColorAndSize();
  Rect rect = new Rect(x, y, x + (baseWidth*nwidth), y + height);
  shapeDrawable.setBounds(rect);
  shapeDrawable.getPaint().set(paint);
  shapeDrawable.draw(canvas);

}

public void changeColorAndSize(){
       double amp=getAmplitude();
       nWidth=amp;
       paint.setARGB (a, r*(Integer.parseInt(amp)), g, b);
      //This will change the redness of the bar. a,g and b will have to be set by you

}

public double getAmplitude() {
        if (mRecorder != null)
                return  (mRecorder.getMaxAmplitude());
        else
                return 0;
}

要使电表每隔'x'秒更换一次,您必须重复拨打postInvalidate()

OR

使用动画,然后从您的视图中调用startAnimation()