我正在编写一个应用程序,它的行为类似于现有的语音识别,但会将声音数据发送到一个专有的Web服务来执行语音识别部分。我正在使用标准的MediaRecord(它是AMR-NB编码的),这似乎是完美的语音识别。唯一的数据是通过 getMaxAmplitude() 方法提供的振幅。
我尝试检测人何时开始说话,以便当人停止说话约2秒时,我可以继续将声音数据发送到Web服务。现在,我使用振幅阈值,如果振幅超过某个值(即1500),那么我假设这个人在说话。我担心的是振幅水平可能会因设备而异(iIndieE. Nexus One V Droid),所以我正在寻找一种更标准的方法来处理这个问题,可以从振幅值中推导出来。
P.S.我研究了graphing-amplitude,但它没有提供一种仅使用振幅的方法。
4条答案
按热度按时间gojuced71#
好吧,这可能没有多大帮助,但我们可以从应用测量设备麦克风捕获的失调噪声开始,并据此动态应用阈值,这样就可以使其适应不同设备的麦克风,以及用户在给定时间使用它的环境。
fhg3lkii2#
1500是一个太小的数字。测量振幅的变化会更好。但是,它仍然会导致漏检。
我担心解决这个问题的唯一方法是弄清楚如何识别一个简单的单词或音调,而不是简单地检测噪音。
1tuwyuhd3#
现在有多个为Android设计的VAD库。其中之一是:https://github.com/gkonovalov/android-vad
ubby3x7f4#
大多数智能手机都配有接近传感器。Android有使用这些传感器的API。这足以完成你所描述的工作。当用户将手机靠近耳朵时,你可以编写应用程序来开始录音。这应该很容易。
Sensor class for android