11

我知道 Visualizer 在使用 android Media Player 播放音频时会显示一些波形。

但是我想在录制音频时显示 Visualizer 意味着在录制时我想显示根据用户语音节拍而变化的线性波。

有没有可能在android中做。

4

3 回答 3

17

通过每 x 毫秒调用一次您的 MediaRecorder.getMaxAmplitude(),您将拥有(来自官方文档):

自上次调用此方法以来采样的最大绝对幅度。

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

编辑:正如您所知,检索到的值在所有 android 设备上都是相同的:介于 0 和 32767 之间。(我有超过 10k 的用户报告在他们吹入麦克风时给了我这个值)。

于 2012-12-03T12:24:21.300 回答
3

两个重要的事情:

  • 您需要将实时字节(来自麦克风)转换为数值才能绘制它们。
  • 由于您使用实时图表,因此使用 SurfaceView 绘制这些点。

    将录制字节转换为数值参考: Android:如果发生任何声音,监听器会录制声音,您将看到变量“temp”保存音频的数值。

    绘图点 这些表示您的 Y 值的数值相对于增加的 X(时间间隔)值 (0,1,2..) 绘制为图形。使用 SurfaceView 例如..,

//canvas.drawLine(previous X value,previous Y value,X,Y, paint);
canvas.drawPoint(X,Y,paint);
SurfaceHolder.unlockCanvasAndPost(canvas);

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

希望这可以帮助 :)

于 2012-12-04T18:27:33.113 回答
3

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

检查 AudioRecorder#read(...) 将音频数据放入 byte[] 而不是直接放入文件的方法。

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

于 2012-12-04T17:21:23.787 回答