Android: как играть музыку на максимально возможной громкости? - PullRequest
20 голосов
/ 07 марта 2012

Я знаю, что вопрос можно считать «политически некорректным», но я разрабатываю приложение, которое «по замыслу» должно привлекать внимание людей в максимально возможном диапазоне расстояний, иначе оно не будет использовано ... : -)

В настоящее время я использую класс 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); 
}

Проблема в том, что громкость звука, с которой я играю клип, кажется, зависит от настроек "Настройки / Аудио / Voulme", ​​которые установил пользователь. Вместо этого он кажется независимым от настройки кнопок громкости оборудования.

Существует ли способ для приложения Android воспроизводить звук на максимальной физической громкости, допустимой устройством?

Ответы [ 5 ]

42 голосов
/ 07 марта 2012

Я бы предложил использовать getStreamMaxVolume и setStreamVolume, чтобы сделать это:

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

Затем, как только вы закончите, просто установите его обратно в исходный том.

Я думаю, что я был побежденк пуншу, ну да ладно:)

Какой-то код, который на самом деле это делает, я использую MediaPlayer, а не Soundpool, так как это дает вам полный вызов воспроизведения, который, по-видимому, отсутствует в Soundpool:

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

Кстати, с помощью вызова mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); значения streamVolume на самом деле являются числами с плавающей запятой 0 -> 1, которые представляют собой процент от максимального значения, так что вы действительно просто захотите вставить значение 1.0f.

5 голосов
/ 07 марта 2012

Вы можете настроить параметры перед воспроизведением звука.

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.getStreamMaxVolume(), 0);
1 голос
/ 29 декабря 2015

Оба эти кода работают для меня, но я предпочитаю один из 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 голос
/ 07 марта 2012
    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(); 
            }
        });
0 голосов
/ 20 ноября 2012

Это неправильный код.

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