这是我的Activity
:
public class MainActivity extends AppCompatActivity {
private SoundPool soundPool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
final int sound1 = soundPool.load(this, R.raw.whack, 1);
final int sound2 = soundPool.load(this, R.raw.miss, 1);
Button b1 = (Button) findViewById(R.id.b1);
Button b2 = (Button) findViewById(R.id.b2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
playSound(sound1);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
playSound(sound2);
}
});
}
private void playSound(int soundId) {
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
float volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
soundPool.play(soundId, volume, volume, 1, 0, 1);
}
}
问题是当我点击Button1时,播放了sound1。然后当我一次又一次地点击Button1时,在我点击Button2之前什么也没有播放。当我这样做时,播放声音2。然后,如果我点击Button1,则播放sound1。当我一遍又一遍地点击Button2时会发生同样的情况。那么这里的问题是什么?
答案 0 :(得分:5)
根据SoundPool.play()文档volume
,值必须从0.0
到1.0
。但是audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
会返回更大的值(例如12)。
因此,您应该设置正确的音量值。下面的工作代码:
public static void playAudio(Context context, SoundPool player, int soundId, float speed){
AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
float actualVolume=(float) mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume=(float) mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume= actualVolume/maxVolume;
player.play(soundId, volume, volume, 1, 0, speed);
}
答案 1 :(得分:3)
我们遇到了同样的问题,我们找到了解决此问题的方法。不是最干净的方法,但如果它有效,那就不是傻了!
它仅适用于设置为1的最大数量的流。我们在播放正常声音之前在音量0播放静音。它的优先级也是0.是的,这很难看!
这是Xamarin所以它是C#代码,但Java非常相似。
我们的AudioService初始化:
_soundPool = new SoundPool.Builder().SetMaxStreams(1).Build();
_silentSoundId = _soundPool.Load(Application.Context, Resource.Raw.Silent, 0);
_soundId = _soundPool.Load(Application.Context, Resource.Raw.Sound, 1);
说到播放声音:
_soundPool.Play(_silentSoundId, 0, 0, 0, 0, 1f);
_soundPool.Play(_soundId, 15, 15, 1, 0, 1f);
答案 2 :(得分:2)
Android版7.0存在同样的问题,您可以尝试通过更改此部分代码来解决此问题:
else if(clr9[0].Equals(clr9[1].Equals(clr9[2].Equals(clr9[3]))))
到
float volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
希望这可以解决您所面临的问题。 :)