am 7d987180: Merge change I19f2928b into eclair
Merge commit '7d9871805beef4ea5e319f1a11ab32f610031845' into eclair-plus-aosp * commit '7d9871805beef4ea5e319f1a11ab32f610031845': Fix issue 2141503: Keyclick sound doesn't honor volume settings.
This commit is contained in:
@@ -1063,7 +1063,9 @@ public class AudioManager {
|
|||||||
* {@link #FX_KEYPRESS_SPACEBAR},
|
* {@link #FX_KEYPRESS_SPACEBAR},
|
||||||
* {@link #FX_KEYPRESS_DELETE},
|
* {@link #FX_KEYPRESS_DELETE},
|
||||||
* {@link #FX_KEYPRESS_RETURN},
|
* {@link #FX_KEYPRESS_RETURN},
|
||||||
* @param volume Sound effect volume
|
* @param volume Sound effect volume.
|
||||||
|
* The volume value is a raw scalar so UI controls should be scaled logarithmically.
|
||||||
|
* If a volume of -1 is specified, the AudioManager.STREAM_MUSIC stream volume minus 3dB will be used.
|
||||||
* NOTE: This version is for applications that have their own
|
* NOTE: This version is for applications that have their own
|
||||||
* settings panel for enabling and controlling volume.
|
* settings panel for enabling and controlling volume.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -619,11 +619,12 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
/** @see AudioManager#playSoundEffect(int) */
|
/** @see AudioManager#playSoundEffect(int) */
|
||||||
public void playSoundEffect(int effectType) {
|
public void playSoundEffect(int effectType) {
|
||||||
sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
|
sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
|
||||||
effectType, SOUND_EFFECT_VOLUME, null, 0);
|
effectType, -1, null, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @see AudioManager#playSoundEffect(int, float) */
|
/** @see AudioManager#playSoundEffect(int, float) */
|
||||||
public void playSoundEffectVolume(int effectType, float volume) {
|
public void playSoundEffectVolume(int effectType, float volume) {
|
||||||
|
loadSoundEffects();
|
||||||
sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
|
sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SHARED_MSG, SENDMSG_NOOP,
|
||||||
effectType, (int) (volume * 1000), null, 0);
|
effectType, (int) (volume * 1000), null, 0);
|
||||||
}
|
}
|
||||||
@@ -634,6 +635,9 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
*/
|
*/
|
||||||
public boolean loadSoundEffects() {
|
public boolean loadSoundEffects() {
|
||||||
synchronized (mSoundEffectsLock) {
|
synchronized (mSoundEffectsLock) {
|
||||||
|
if (mSoundPool != null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
mSoundPool = new SoundPool(NUM_SOUNDPOOL_CHANNELS, AudioSystem.STREAM_SYSTEM, 0);
|
mSoundPool = new SoundPool(NUM_SOUNDPOOL_CHANNELS, AudioSystem.STREAM_SYSTEM, 0);
|
||||||
if (mSoundPool == null) {
|
if (mSoundPool == null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -1197,10 +1201,20 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
if (mSoundPool == null) {
|
if (mSoundPool == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
float volFloat;
|
||||||
|
// use STREAM_MUSIC volume attenuated by 3 dB if volume is not specified by caller
|
||||||
|
if (volume < 0) {
|
||||||
|
// Same linear to log conversion as in native AudioSystem::linearToLog() (AudioSystem.cpp)
|
||||||
|
float dBPerStep = (float)((0.5 * 100) / MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]);
|
||||||
|
int musicVolIndex = (mStreamStates[AudioSystem.STREAM_MUSIC].mIndex + 5) / 10;
|
||||||
|
float musicVoldB = dBPerStep * (musicVolIndex - MAX_STREAM_VOLUME[AudioSystem.STREAM_MUSIC]);
|
||||||
|
volFloat = (float)Math.pow(10, (musicVoldB - 3)/20);
|
||||||
|
} else {
|
||||||
|
volFloat = (float) volume / 1000.0f;
|
||||||
|
}
|
||||||
|
|
||||||
if (SOUND_EFFECT_FILES_MAP[effectType][1] > 0) {
|
if (SOUND_EFFECT_FILES_MAP[effectType][1] > 0) {
|
||||||
float v = (float) volume / 1000.0f;
|
mSoundPool.play(SOUND_EFFECT_FILES_MAP[effectType][1], volFloat, volFloat, 0, 0, 1.0f);
|
||||||
mSoundPool.play(SOUND_EFFECT_FILES_MAP[effectType][1], v, v, 0, 0, 1.0f);
|
|
||||||
} else {
|
} else {
|
||||||
MediaPlayer mediaPlayer = new MediaPlayer();
|
MediaPlayer mediaPlayer = new MediaPlayer();
|
||||||
if (mediaPlayer != null) {
|
if (mediaPlayer != null) {
|
||||||
@@ -1209,6 +1223,7 @@ public class AudioService extends IAudioService.Stub {
|
|||||||
mediaPlayer.setDataSource(filePath);
|
mediaPlayer.setDataSource(filePath);
|
||||||
mediaPlayer.setAudioStreamType(AudioSystem.STREAM_SYSTEM);
|
mediaPlayer.setAudioStreamType(AudioSystem.STREAM_SYSTEM);
|
||||||
mediaPlayer.prepare();
|
mediaPlayer.prepare();
|
||||||
|
mediaPlayer.setVolume(volFloat, volFloat);
|
||||||
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
|
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
|
||||||
public void onCompletion(MediaPlayer mp) {
|
public void onCompletion(MediaPlayer mp) {
|
||||||
cleanupPlayer(mp);
|
cleanupPlayer(mp);
|
||||||
|
|||||||
Reference in New Issue
Block a user