如何在android中录制音频时使用Visualizer

如何在android中录制音频时使用Visualizer,android,visualizer,Android,Visualizer,我知道Visualizer在使用android媒体播放器播放音频时会显示一些波形 但我想在录制音频时显示Visualizer,也就是说,在录制时,我想显示线性波,它根据用户的声音节拍而变化 是否可以在android中执行此操作。每x毫秒调用一次MediaRecorder.getMaxAmpliance(),您将拥有(从): 自上次调用以来采样的最大绝对振幅 这个方法 然后,您可以实时处理该值以绘制图形或更改某些视图属性。 不完美,但我希望它能有所帮助=) 编辑:正如您所知,所有android设备

我知道Visualizer在使用android媒体播放器播放音频时会显示一些波形

但我想在录制音频时显示Visualizer,也就是说,在录制时,我想显示线性波,它根据用户的声音节拍而变化


是否可以在android中执行此操作。

每x毫秒调用一次MediaRecorder.getMaxAmpliance(),您将拥有(从):

自上次调用以来采样的最大绝对振幅 这个方法

然后,您可以实时处理该值以绘制图形或更改某些视图属性。
不完美,但我希望它能有所帮助=)

编辑:正如您所知,所有android设备的检索值都是相同的:介于0和32767之间。(我有超过10k的用户报告,当它们吹进话筒时,会给出这个值)。

您可能需要使用类而不是MediaRecorder

检查AudioRecorder#read(…)方法,该方法将音频数据放入字节[],而不是直接放入文件


要显示图形上的更改,您必须分析数据(以PCM 8或16位编码)并实时更新图形。

两件重要的事情:

  • 您需要将活动字节(从mic)转换为数值,以便打印它们
  • 因为您使用的是实时图形,所以要绘制这些点 使用SurfaceView

    将录制字节转换为数值参考: 您将看到变量“temp”保存音频的数值

    绘图点 这些表示Y值的数值以图形形式与递增的X(时间间隔)值(0,1,2..)相对应。使用SurfaceView 例如

您不需要绘制所有值,为了提高效率,您可以根据您的条件过滤这些值,并绘制特定的时间间隔


希望这有帮助:)

一个电平表就足够了,还是您需要每个频率电平?我需要至少一些拍数值来绘制一个图形,我自己使用图形Apiclot记录的字节随时间间隔的增加而增加。。请参阅下面的答案,以便指定输出文件。。可以跳过它吗?不可以,只需给记录器一个这样的文件:File cacheDir=getwriteablecachedir();samplePath=cacheDir.getAbsolutePath()+“/sample”;mRecorder.setOutputFile(samplePath);完成后删除它…@ShashankKumar:或者使用录音机。(无需文件)如何在Visualizer类中使用此方法,您是否可以详细解释或提供任何可以显示所有这些功能的示例代码
//canvas.drawLine(previous X value,previous Y value,X,Y, paint);
canvas.drawPoint(X,Y,paint);
SurfaceHolder.unlockCanvasAndPost(canvas);