使用具有ICS Android的设备进行哨子检测?

时间:2013-09-18 08:17:52

标签: android android-4.0-ice-cream-sandwich audio-recording voice-recognition

我在我的应用中使用musicg库进行口哨检测。

到目前为止,当我在具有Froyo,GingerBread甚至JellyBean的设备上测试时,该库运行良好,但在ICS上测试时,它无法正确检测到口哨声。

在Whistle检测库中,它有一个名为 WhistleApi.java 的类,它具有频率,强度,标准差等的边界值:

protected void init(){
    // settings for detecting a whistle
    minFrequency = 600.0f;
    maxFrequency = Double.MAX_VALUE;

    minIntensity = 100.0f;
    maxIntensity = 100000.0f;

    minStandardDeviation = 0.1f;
    maxStandardDeviation = 1.0f;

    highPass = 100;
    lowPass = 10000;

    minNumZeroCross = 50;
    maxNumZeroCross = 200;

    numRobust = 10;
}

到目前为止,我知道通过分析日志,类DetectionApi.java isPassedStandardDeviation(double [] [] spectrogramData)中没有识别出哨子。

正在初始化AudioRecord:

private int channelConfiguration = AudioFormat.CHANNEL_IN_MONO;
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private int sampleRate = 44100;
private int frameByteSize = 2048;

int sampleRate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC);
int recBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfiguration, audioEncoding); // need to be larger than size of a frame
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channelConfiguration, audioEncoding, recBufSize);

通过将 WhistleApi.java 类中的边界值更改为无结果,我尝试了不同的解决方法。任何人都可以指导我,我在哪里俯瞰,或者我在哪里可以找到图书馆的错误?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

我面临类似的问题。对我来说,whismDemo正在使用ICS检测micromax funbook pro平板电脑上的哨声,但未检测到带有ICS的micromax A110手机中的哨声。

在whistleApi中,我将minNumZeroCross从50改为20并解决了问题。