android - 使用我的音量设置播放声音

标签 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);
}

最佳答案

不要使用AudioManagersetVolume。使用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

关于android - 使用我的音量设置播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26485039/

相关文章:

audio - Windows Phone 8.1通过扬声器播放音频数据流?

video - 将 mp3 转换为 mp4

android - 拖放组件在 android studio 的预览中不可见

java - android.view.WindowLeaked 后 Camera Intent

HTML 5 video 标签视频和音频去同步

audio - 由qtwenengine simplebrowser播放的html5视频在树莓派2上没有声音且不流畅

c - UDP 上的 wav 文件无法在带有 Alsa-lib 的 unix 中正确播放

android - 如何获取 Android Studio 项目中的总行数?

android - 仅在单击共享按钮后执行共享所需的操作

java - Android Studio,如果靠近位置,则会收到日期通知