AudioManager.setMicrophoneMute() и TarsosDSP AudioDispatcher
Я все еще вижу некоторые проблемы с функцией AudioManager.setMicrophoneMute(). Я контролирую аудио вход в микрофон через библиотеку TarsosDSP в моем приложении. Я отключил микрофон с помощью функции setMicrophoneMute (), но API TarsosDSP по-прежнему показывает входящий звук в микрофон. Есть ли у вас какие-либо идеи, как отключить звук микрофона таким образом, чтобы получение высоты тона результата из AudioDispatcherFactory.fromDefaultMicrophone указывало на то, что микрофон отключен? Вот мой код:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager = (AudioManager)
getSystemService(Context.AUDIO_SERVICE);
checkBox = (CheckBox) findViewById(R.id.checkBox);
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked()) {
audioManager.setMicrophoneMute(true);
isMicMuted = true;
}
else {
audioManager.setMicrophoneMute(false);
isMicMuted = false;
}
}
});
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
PitchDetectionHandler pdh = new PitchDetectionHandler() {
@Override
public void handlePitch(PitchDetectionResult result, AudioEvent e) {
final float pitchInHz = result.getPitch();
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Somehow make this an arbitrary frequency check
compareFreqs = abs(pitchInHz - freq) < 5.0;
TextView text = (TextView) findViewById(R.id.textView);
TextView text2 = (TextView) findViewById(R.id.textView2);
text2.setText("frequency: " + pitchInHz);
if (pitchInHz == 466) {
text.setText("Mic Muted");
maxfreq = pitchInHz;
isMicMuted = true;
Log.i("maxfrequency", String.valueOf(maxfreq));
}
}
}
);
}
};
AudioProcessor p = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, pdh);
dispatcher.addAudioProcessor(p);
new Thread(dispatcher, "Audio Dispatcher").start();
}