到目前为止:
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
的值不会发生变化。
我想获得一个值来确定用户是否在说话。
这个演示一台设备上面可以如期运行,体积在不说话和说话时候波动比较大,但是再另外一些设备上基本上就没有什么波动。
翻译:
在此演示中,当音量在一台设备上运行时,音量要么静音要么非常大,但在不同的设备上,基本没有其他波动。
答案 0 :(得分:0)
如果没有声音,您的变量(&#34; v&#34;,&#34;意思是&#34;,&#34; volumn&#34;)等于零。我猜你没有录音的许可。
首先,请检查您是否在清单文件中有音频记录权限。
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
如果测试的设备运行Marshmallow,则需要在运行时请求权限: https://developer.android.com/training/permissions/requesting.html