使用音量设置播放声音

时间:2014-10-21 10:58:01

标签: android audio

我正在开发一款根据特定间隔播放声音的应用。而且我让用户控制那些音量音量。现在告诉它没问题,音量等级是用户之前选择的。但这里的问题是设备音量水平也发生了变化。 问题是:如何在不影响设备声级的情况下以音量级别播放声音?

defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int streamMaxVolume = mAudioManager.getStreamMaxVolume(3);
vol = defaultSharedPreferences.getInt("vol_one", streamMaxVolume);
mAudioManager.setStreamVolume(3, vol, 0);
playsound();

更新:根据Biraj解决方案 要获取每个设备的最大允许容量,请使用 int streamMaxVolume 而不是 MAX_VOLUME 变量。 所以完整的答案是:

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int streamMaxVolume = mAudioManager.getStreamMaxVolume(3);
vol = defaultSharedPreferences.getInt("vol_one", streamMaxVolume);
setVolume(vol);
*
*
*
public void setVolume(int soundVolume){
    final float volume = (float) (1 - (Math.log(streamMaxVolume- soundVolume) /    Math.log(streamMaxVolume)));
    mediaPlayer.setVolume(volume, volume);
}

1 个答案:

答案 0 :(得分:3)

请勿AudioManager使用setVolume。使用MediaPlayer.setVoume()

private final static int MAX_VOLUME = 100;



public void setVolume(int soundVolume){
        final float volume = (float) (1 - (Math.log(MAX_VOLUME - soundVolume) / Math.log(MAX_VOLUME)));
        mediaPlayer.setVolume(volume, volume);
    }

说明:

setVolume (float leftVolume, float rightVolume)

设置此播放器的音量。建议使用此API来平衡应用程序中音频流的输出。除非您正在编写用于控制用户设置的应用程序,否则应优先使用此API,以设置特定类型的所有流的卷的setStreamVolume(int,int,int)。请注意,传递的卷值是0.0到1.0范围内的原始标量。 UI控件应该以对数方式进行缩放。

参数

leftVolume留下音量标量

rightVolume右卷标量

有关详细信息,请访问HERE