Android 禁用HTC噪声消除

Android 禁用HTC噪声消除,android,microphone,htc-android,Android,Microphone,Htc Android,我有一个可以读取麦克风的应用程序。具体地说,我检测到话筒中有气流;)它在很多HTC设备上都不起作用。我捡到了一个HTC机器人厄里斯和一个HTC机器人难以置信。除此之外,我还有许多朋友的报告,他们的HTC设备也遇到了这个问题,包括相对较新的HTC Thunderbolt 因此,调试该应用程序表明,星巴克的环境噪声记录在4000-11000之间。我一吹入麦克风,输入音量就下降到4000秒:每次都是,一直都是 有人知道这是否可以通过编程禁用吗 下面是我如何读取输入的 int minBuffer

我有一个可以读取麦克风的应用程序。具体地说,我检测到话筒中有气流;)它在很多HTC设备上都不起作用。我捡到了一个HTC机器人厄里斯和一个HTC机器人难以置信。除此之外,我还有许多朋友的报告,他们的HTC设备也遇到了这个问题,包括相对较新的HTC Thunderbolt

因此,调试该应用程序表明,星巴克的环境噪声记录在4000-11000之间。我一吹入麦克风,输入音量就下降到4000秒:每次都是,一直都是

有人知道这是否可以通过编程禁用吗

下面是我如何读取输入的

    int minBufferSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
    AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize);
    short[] buffer = new short[minBufferSize];

    audioRecord.startRecording();
    audioRecord.read(buffer, 0, minBufferSize);

    int i = 0;
    for (short sample : buffer) {
        inputVolume = Math.abs(sample);
        maxVolumeIn = (inputVolume > maxVolumeIn) ? inputVolume : maxVolumeIn;
        if (inputVolume >= micSensitivity) {
            Log.d(TAG, "Blowing Detected. Volume Level: " + inputVolume);
            break;
        }
    }

它可以设置到非常小的程度

使用音频源
MediaRecorder.AudioSource.VOICE_RECOGNITION
而不是
MediaRecorder.AudioSource.MIC将关闭该输入的音频过滤器。总的来说,从一个设备到另一个设备的过滤来看,这是一种狂野的西部。即使使用
语音识别
也不是完美的,因为只有在冰淇淋三明治兼容性定义中才采用了关闭过滤器。HTC在吃冰激凌三明治之前就用过它,所以对于你来说,它可能是正确的选择

根据本手册第5.3节:

除上述录音规范外,当应用程序开始使用android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION录制音频流时:

  • 必须禁用降噪处理(如果存在)
  • 必须禁用自动增益控制(如果存在)

我还没有机会尝试你的建议。我将奖励您一部分奖金,因为您的解决方案似乎合理,但可能需要进行重大的重构和测试。要获得一个适用于所有设备的可靠音频解决方案,肯定需要一些代码练习。我知道痛苦。