gpt4 book ai didi

android - 如何使用我的 Android 移动应用程序以分贝为单位设置音量?

转载 作者:行者123 更新时间:2023-11-29 15:59:21 27 4
gpt4 key购买 nike

我正在开发一个移动应用程序,我需要在其中播放声音文件。在按下音量按钮时,我需要通过我的应用程序增加/减少音量。我正在使用媒体播放器播放并使用 SetVolume(left, right) 函数来设置音量。

MediaPlayer mp;
float left = 0.0f;
float right = 0.6f;

public void OnPlay(View v){
mp = MediaPlayer.create(this, R.raw.twofiftybeep);
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

mp.start();


mp.setOnCompletionListener(new OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
// Playing the file continuously
mp.setVolume(left, right);

mp.start();

}
} );
}

public void OnStop(View v){
mp.stop();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


}

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
left= left + 0.05f;
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
left = left - 0.05f;
return true;
default:
return super.dispatchKeyEvent(event);
}

}

但是 SetVolume 参数的范围是从 0.0f 到 1.0f,其中 0.0f 是最小值,1.0f 是最大值。

但我想设置一些东西,比如 40dB、50dB、60dB 等。在每次按下音量按钮时,我想增加或减少 5dB。

如何将 0.0f - 1.0f 范围转换为 dB 值?

还有其他更好的方法吗?

最佳答案

对于数字信号,dB 通常表示为相对于满量程幅度。

1.0 == 0dB
0.5 == -6dB
0.25 == -12dB
...
0.0 == -inf dB

等等。

将振幅转换为 dB:dB = 20*log10(ampl)

从 dB 转换为振幅:ampl = 10 ^ (dB/20)

然后实现您的目标的最简单方法是以 dB 为单位存储您的值 leftright,并将它们初始化为零。您发布的代码可以保持完全相同,除非您不允许将值增加到零以上。然后在调用 setVolume 时将值转换为线性值。例如mp.setVolume(Math.pow(10,left/20), Math.pow(10,right/20))

关于android - 如何使用我的 Android 移动应用程序以分贝为单位设置音量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604452/

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