获取麦克风音量

时间:2010-10-13 21:29:46

标签: android

如何通过Android麦克风获取音频流的音量?

2 个答案:

答案 0 :(得分:3)

可能有一种更简单的方法,但我知道可以使用的方法是使用AudioRecord对象,该对象配置为观察MediaRecorder.AudioSource.MIC音频源并以8位({{{ 1}})。您需要一个线程在后台运行,并使用AudioFormat.ENCODING_PCM_8BIT调用不断轮询对象以获取音频,该调用使用来自麦克风的音频数据填充给定的字节数组。

因为你是以8位录制的,所以每个音频样本的最大范围是-128到127(虽然我可能有这个错误 - 它可能是0到256)。您必须尝试从返回的字节数组中获取最大幅度字节,或者根据应用程序的需要测试RMS平均值。字节数组的大小也将决定您的应用程序对输入音频音量进行采样的频率。

答案 1 :(得分:1)

如果您被迫以16位PCM进行记录,那么您必须查看每个其他字节的值,因为每个样本将跨越两个字节。诀窍是知道要查看哪个字节 - 我相信它应该是字节数组中返回的奇数索引字节。 如果你想要更高保真度,你可以查看两个字节,你会知道输出音量在2 ^ 15范围内,而不仅仅是2 ^ 7。

由于字节类型是用Java签名的,因此您只需查看每个buffer[index * 2 + 1]字节并保存最大的字节。这将为您提供在给定样本上检测到的最大体积。

正如我在其他答案中所述,您也可以取这些值的平均值,具体取决于您使用此数字的位置。