gpt4 book ai didi

java - Android if 语句在 runnable 中并不总是触发

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:18 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的小东西,当用户通过与电话交谈“中断”音频文件时,它会停止播放音频文件。我正在使用SoundMeter class that this person wrote获取麦克风的 maxAmplitude。我已将阈值设置为 800,并希望不断(每 50 毫秒)测试麦克风幅度的返回。

出于某种原因,当我出现“中断”并且音频停止时,它会出现问题。我希望中断在幅度高于 800 的整个时间内都显示出来。

    handler = new Handler();
final Runnable r = new Runnable() {
@Override
public void run() {
mic_amplitude.setText(""+mSoundMeter.getAmplitude());
if(mSoundMeter.getAmplitude() > threshold) {
Log.d("INTERRUPT", "INTERRUPT");
interrupt.setText("Interrupt");
mBackgroundAudio.pause(mp);
audioButton.setText("Resume Audio");
} else {
interrupt.setText("");
}
handler.postDelayed(this, 50);
}
};
handler.postDelayed(r, 50);

在查看此内容时,我能够看到振幅稳定在 40-50,而没有背景噪音,并且在安静说话时看到峰值为 1200-1500。我希望中断能够在高于 800 的任何时间显示,但目前只是间歇性地显示。

最佳答案

好吧,我明白了。我通过记录放大器和中断来测试我的幅度,我发现我得到了 0。我意识到我一直在测试新的幅度(除了我显示的放大器),所以我将幅度分配给一个变量,并在其他地方使用该变量。

这是我的结果:

    handler = new Handler();
final Runnable r = new Runnable() {
@Override
public void run() {
mAmplitude = mSoundMeter.getAmplitude();
mic_amplitude.setText(""+mAmplitude);
if(mAmplitude > threshold) {
Log.d("INTERRUPT", "INTERRUPT " + mAmplitude);
interrupt.setText("Interrupt");
mBackgroundAudio.pause(mp);
audioButton.setText("Resume Audio");
} else {
interrupt.setText("");
}
handler.postDelayed(this, 100);
}
};
handler.postDelayed(r, 100);

关于java - Android if 语句在 runnable 中并不总是触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41250535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com