Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: how to play music at maximum possible volume?

Tags:

I know the question can be regarded as "politically incorrect", but I'm designing an app which "by design" must get the attention of people within the maximum possible distance range, otherwise it will not be used... :-)

I'm currently using SoundManager class, and this is the code which plays my ogg clip:

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

The problem is that the sound volume I get the clip played with appears to be dependent by "Settings/Audio/Voulme" settings the user has set. Instead it appears to be indipendent by the hardware volume buttons setting.

Is there a way for an Android app to play a sound to the maximum physical volume allowed by the device?

like image 924
MarcoS Avatar asked Mar 07 '12 09:03

MarcoS


People also ask

How do I set volume limit on Android?

From Settings, choose Sounds and vibration and Volume, then tap the three dots (top right) and choose Media volume limit.

How do I increase the volume on the YouTube app?

Adjusting volume from the YouTube App is a quick and straightforward way to increase YouTube volume. You can turn up the volume by: Tapping on the video you want to watch. At the bottom of the video window, you'll see the volume icon, drag the slider to the right to increase the volume, and get a louder sound.


2 Answers

I'd suggest using getStreamMaxVolume and setStreamVolume to do this:

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

Then once you're done just set it back to the original volume.

I think I was beaten to the punch, ahh well :)

Some code that actually does this, I'm using the MediaPlayer rather than the soundpool as this gives you a play complete callback which doesn't appear to be present on the 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);    } }); 

Btw the with call mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f); the streamVolume values are actually floats 0 -> 1 that represent a percentage of the maximum value so you'd really just want to put in 1.0f there.

like image 195
zeetoobiker Avatar answered Jan 10 '23 17:01

zeetoobiker


You can adjust the settings before playing the audio.

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.getStreamMaxVolume(), 0); 
like image 42
josephus Avatar answered Jan 10 '23 16:01

josephus