我正在创建一个应用程序,屏幕上会有多张图片,这些图片将是按钮,点击它们将播放短音频。 我进行了研究,只能找到当前我正在使用的播放声音的方法,但它似乎不太响应。我希望声音可以快速播放,并对许多快速的点击做出响应。 我不确定在Android中是否可能实现此目标。
我用来播放声音的代码是:
Button sound1;
MediaPlayer firstSound;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
firstSound = MediaPlayer.create(SoundActivity.this, R.raw.click);
sound1 = (Button) findViewById(R.id.Sound1);
beaver.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
firstSound.start();
}
});
}
我的延迟问题可能也与我使用媒体播放器对象的方式有关?我觉得在我的手机上应该更顺畅,欢迎提供有关在Android中播放音频的建议。
谢谢。
自从发现Sound Pool以后,我已经编辑了代码并使用它,它运行得非常完美,新代码如下:
SoundPool soundPool;
HashMap<Integer, Integer> soundPoolMap;
int soundID = 1;
Button sound1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1));
sound1 = (Button) findViewById(R.id.bBeaver);
sound1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float curVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
float maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float leftVolume = curVolume/maxVolume;
float rightVolume = curVolume/maxVolume;
int priority = 1;
int no_loop = 0;
float normal_playback_rate = 1f;
soundPool.play(soundID, leftVolume, rightVolume, priority, no_loop, normal_playback_rate);
}
});
}
谢谢
SoundPool
是正确的选择,虽然它比MediaPlayer
稍微复杂一些。但这可以让您获得高效和快速的播放。然而,您应该使用一个库,或者自己创建一个,因为您必须利用一个单独的工作线程:https://github.com/delight-im/Android-Audio - caw