So far:
byte data[] = new byte[recBufSize];
read = audioRecord.read(data, 0, recBufSize);
long v = 0;
for (int i = 0; i < data.length; i++) {
v += Math.abs(data[i]);
}
double mean = v / (double) read;
final double volume = 20 * Math.log10(mean);
有些设备工作正常,但在其他设备上运行时,v
, mean
和volume
的值没有变化。
我想获得一个值来确定用户是否在说话。
这个演示一台设备上面可以如期运行,卷在不说话和说话时候波动比较大,但是再另外一些设备上基本上就没有什么波动。
翻译:在这个演示中,当它在一个设备上运行时,音量要么静音要么非常大,但在不同的设备上,基本上没有其他波动
如果没有声音,则变量("v", "mean", " volume ")等于零。我猜你没有得到录音的许可。
首先,请检查您是否在Manifest文件中有录音权限。
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
如果测试设备运行Marshmallow,您需要在运行时请求权限:https://developer.android.com/training/permissions/requesting.html