0

我在我的应用程序中使用音乐库进行口哨检测。

到目前为止,当我在具有 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类中的边界值更改为无结果,我尝试了不同的解决方法。谁能指导我,我在哪里俯瞰或在图书馆哪里可以找到错误?

提前致谢 :)

4

1 回答 1

0

我面临类似的问题。对我来说,whistleDemo 是在带有 ICS 的 micromax funbook pro 平板电脑上检测到口哨,但在带有 ICS 的 micromax A110 手机中没有检测到口哨。

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

于 2013-12-18T14:30:48.857 回答