web-dev-qa-db-ja.com

Android:可能な最大音量で音楽を再生する方法は?

質問が「政治的に正しくない」と見なされる可能性があることはわかっていますが、私は「設計上」可能な最大距離範囲内の人々の注意を引く必要があるアプリを設計しています。それ以外の場合は使用されません... :-)

私は現在SoundManagerクラスを使用しており、これは私のoggクリップを再生するコードです:

public void playSound(int index) { 
     int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
     mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); 
}

問題は、私がクリップを再生して取得する音量が、ユーザーが設定した「設定/オーディオ/ウルム」設定に依存しているように見えることです。代わりに、ハードウェアボリュームボタンの設定に依存しないように見えます。

Androidアプリがデバイスで許可されている最大物理ボリュームまでサウンドを再生する方法はありますか?

20
MarcoS

これを行うには、getStreamMaxVolumeとsetStreamVolumeを使用することをお勧めします。

_int origionalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
_

その後、完了したら、元のボリュームに戻します。

私はパンチに打ちのめされたと思います、うーん。

これを実際に行うコードがいくつかあります。これは、サウンドプールではなくMediaPlayerを使用しています。これにより、サウンドプールに存在しないように見える完全なコールバックが再生されます。

_final AudioManager mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
final int originalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource("content://media/internal/audio/media/97");
mp.prepare();
mp.start();
mp.setOnCompletionListener(new OnCompletionListener()
{
   @Override
   public void onCompletion(MediaPlayer mp)
   {
      mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0);
   }
});
_

ところでwith mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); streamVolumeの値は実際には最大値のパーセンテージを表す浮動小数点数0-> 1なので、そこに1.0fを入れたいだけです。

42
zeetoobiker

オーディオを再生する前に設定を調整できます。

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.getStreamMaxVolume(), 0);
5
josephus

これらのコードはどちらも私にとってはうまくいきましたが、私はMediaPlayerからのコードを好みます

AudioManager  audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_PLAY_SOUND);

Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
MediaPlayer mp=new MediaPlayer();
mp.setLooping(false);
mp = MediaPlayer.create(HomeActivity.this, notification);
mp.setVolume(count,count);
mp.start();
});
1
Thilina Anuradh
    float count=100*.01f;

MediaPlayer mp=new MediaPlayer();

 mp.setLooping(false);     
           mp = MediaPlayer.create(ActivityName.this, myUri);

          mp.setVolume(count,count);  
           mp.start(); 
 mp.setOnCompletionListener(new OnCompletionListener() {

            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                                 mp.release(); 
                 mp.stop(); 
            }
        });
1
Pradeep Sodhi