2017-05-10 4 views
0

MediaPlayerを使用して音を再生しています。現在のストリームの音量を受け取り、setVolumeメソッドを使用してメディアプレーヤーの音量として設定します。Androidのストリームボリュームを0から1の間の値に変換する方法

の問題は、私はこのようなボリュームの値を取る場合:

audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 

IはsetSound方法は、0と1の間の値

が期待しながら、ボリュームの指標である受信値

インデックスを0と1の間の値に変換するにはどうすればよいですか?

+0

最大可能インデックスを知っていますか? yesの場合、最大可能インデックスで1を除算し、 'audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);で返されたものを、現在のインデックス/最大インデックスの –

+0

で乗算します。私はちょうど最大のボリュームを得るインデックスも同様に私は自分自身を考えていないために自分自身をキックするかどうかを確認する必要があります –

答えて

0

あなたは以下のコードを使用することにより、0-1の間の値を設定することができます...

private final static int MAX_VOLUME = 100; 
final float volume = (float) (1 - (Math.log(MAX_VOLUME - soundVolume)/
Math.log(MAX_VOLUME))); 
mediaPlayer.setVolume(volume, volume); 
+0

なぜ単純にsoundVolume/MAX_VOLUME? –

0

は、単にストリームの最大ボリュームインデックスによって、現在のボリュームインデックスを分割

int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 

float desiredValue = currentVolume/maxVolume; 

ますあなたが望むようにその値を使用できます(0と1の間にあります)

+0

私はあなたがそれを対数的にスケールし、なぜ使用しないのかを読んだことがあります:最終フロートボリューム=(float)(1 - (Math.log(MAX_VOLUME - soundVolume)/ Math.log(MAX_VOLUME))); ? –

関連する問題