我正在编写一个应用程序,它的行为将类似于现有的语音识别,但将发送声音数据到一个专有的web服务来执行语音识别部分。我使用的标准MediaRecord (这是AMR编码),似乎是完美的语音识别。通过getMaxAmplitude()方法提供的唯一数据是振幅。
我试图检测人什么时候开始说话,这样当这个人停止说话大约2秒时,我就可以继续将声音数据发送到web服务。现在,我用一个阈值来表示振幅,如果它超过一个值(即1500),那么我假设这个人在说话。我担心的是,振幅水平可能因设备而异(即Nexus One v Droid),因此我正在寻找一种更标准的方法,可以从振幅值中导出。
我看了图幅,但它并没有提供一个方法来做它的幅度。
发布于 2010-10-16 00:16:28
嗯,这可能没有多大帮助,但是从应用程序测量设备的麦克风捕获的偏移噪声开始,然后在此基础上动态地应用阈值如何?这样,你就可以使它适应不同设备的麦克风,也适应用户在特定时间使用的环境。
发布于 2010-10-18 11:06:45
1500是太低的一个数字。测量振幅的变化会更好。然而,它仍然会导致漏检。
我担心解决这个问题的唯一方法是弄清楚如何识别一个简单的单词或声调,而不是简单地检测噪音。
发布于 2010-10-16 00:30:39
大多数智能手机都配备了接近传感器。Android有使用这些传感器的API。这对你所描述的工作来说就足够了。当用户移动手机靠近他的耳朵,你可以编码应用程序开始录音。这应该很容易。
用于android的传感器类
https://stackoverflow.com/questions/3946375
复制相似问题