我在我的应用中使用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 类中的边界值更改为无结果,我尝试了不同的解决方法。任何人都可以指导我,我在哪里俯瞰,或者我在哪里可以找到图书馆的错误?
提前致谢:)
答案 0 :(得分:0)
我面临类似的问题。对我来说,whismDemo正在使用ICS检测micromax funbook pro平板电脑上的哨声,但未检测到带有ICS的micromax A110手机中的哨声。
在whistleApi中,我将minNumZeroCross从50改为20并解决了问题。