如何在android中录制音频时做Visualizer

Posted

技术标签:

【中文标题】如何在android中录制音频时做Visualizer【英文标题】:How to do Visualizer while recording audio in android 【发布时间】:2012-11-13 14:34:26 【问题描述】:

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

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

在android中可以吗。

【问题讨论】:

一个电平表就够了吗,还是你需要每个频率电平? 我需要至少一些节拍值来使用图形 api 自己绘制图形 随着时间间隔的增加绘制记录的字节..参考下面的答案 【参考方案1】:

通过每 x 毫秒调用一次 MediaRecorder.getMaxAmplitude(),您将拥有(来自 official documentation):

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

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

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

【讨论】:

需要指定输出文件..可以跳过吗? 不,不能,只要给记录器一个这样的: File cacheDir = getWritableCacheDir(); samplePath = cacheDir.getAbsolutePath() + "/sample"; mRecorder.setOutputFile(samplePath);完成后将其删除... @ShashankKumar:或使用录音机。 (无需文件) 如何在 Visualizer 类中使用这个方法,你能详细解释一下或者你能提供任何可以显示所有这些功能的示例代码【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

两件重要的事情:

您需要将实时字节(来自麦克风)转换为数值以便绘制它们。

由于您使用实时图表来绘制这些点 使用 SurfaceView。

将记录字节转换为数值参考: Android: Listener to record sound if any sound occurs 您将在其中看到变量“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);

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

希望这会有所帮助:)

【讨论】:

以上是关于如何在android中录制音频时做Visualizer的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中录制质量更好的音频文件?

Android:如何配置“tinymix”以使用“tinycap”录制系统音频

Android 录制音频没有 SDCARD

如何在 android 设备中录制内部音频 [root/no root]

在android中录制现有的音频文件

在 Android 中录制音频时捕获时间戳