Java Android:我如何循环声音效果?
我有两个声音效果分配给一个按钮。我在想,在播放完最后一个音效后,我如何才能回到第一个音效Java Android:我如何循环声音效果?,java,android,audio,soundpool,Java,Android,Audio,Soundpool,我有两个声音效果分配给一个按钮。我在想,在播放完最后一个音效后,我如何才能回到第一个音效 mSoundManager = new SoundManager(); mSoundManager.initSounds(getBaseContext()); mSoundManager.addSound(1, R.raw.finn_whatthejugisthat); mSoundManager.addSound(2, R.raw.jake_dancingwithbabes); mSoundManager
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
mSoundManager.addSound(1, R.raw.finn_whatthejugisthat);
mSoundManager.addSound(2, R.raw.jake_dancingwithbabes);
mSoundManager.addSound(3, R.raw.lsp_dontlumpingyellatme);
mSoundManager.addSound(4, R.raw.pb_shouldntpunchbrainiacs);
mSoundManager.addSound(5, R.raw.iceking_imabanana);
mSoundManager.addSound(5, R.raw.finn_wordtoyourmother);
final Button b1 = (Button)findViewById(R.id.Button1);
b1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.playSound(1, 0);
b1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.playSound(6, 0);
}
});
}
});
SoundManger.java
package com.andrew.finnandjake;
import java.util.HashMap;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
public class SoundManager {
static private SoundManager _instance;
private static SoundPool mSoundPool;
private static HashMap mSoundPoolMap;
private static AudioManager mAudioManager;
private static Context mContext;
SoundManager() {
}
/**
* Requests the instance of the Sound Manager and creates it if it does not
* exist.
*
* @return Returns the single instance of the SoundManager
*/
static synchronized public SoundManager getInstance() {
if (_instance == null)
_instance = new SoundManager();
return _instance;
}
/**
* Initialises the storage for the sounds
*
* @param theContext
* The Application context
*/
public static void initSounds(Context theContext) {
mContext = theContext;
mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
mSoundPoolMap = new HashMap();
mAudioManager = (AudioManager) mContext
.getSystemService(Context.AUDIO_SERVICE);
}
/**
* Add a new Sound to the SoundPool
*
* @param Index
* - The Sound Index for Retrieval
* @param SoundID
* - The Android ID for the Sound asset.
*/
public static void addSound(int Index, int SoundID) {
mSoundPoolMap.put(Index, mSoundPool.load(mContext, SoundID, 1));
}
/**
* Loads the various sound assets Currently hardcoded but could easily be
* changed to be flexible.
*/
public static void loadSounds() {
mSoundPoolMap.put(1, mSoundPool.load(mContext, R.raw.finn_whatthejugisthat, 1));
mSoundPoolMap.put(2, mSoundPool.load(mContext, R.raw.jake_dancingwithbabes, 1));
mSoundPoolMap.put(3, mSoundPool.load(mContext, R.raw.lsp_dontlumpingyellatme, 1));
mSoundPoolMap.put(4, mSoundPool.load(mContext, R.raw.pb_shouldntpunchbrainiacs, 1));
mSoundPoolMap.put(5, mSoundPool.load(mContext, R.raw.iceking_imabanana, 1));
}
/**
* Plays a Sound
*
* @param index
* - The Index of the Sound to be played
* @param speed
* - The Speed to play not, not currently used but included for
* compatibility
*/
public static void playSound(int index, float speed) {
float streamVolume = mAudioManager
.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume
/ mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play((Integer) mSoundPoolMap.get(index), streamVolume, streamVolume,
1, 0, speed);
}
/**
* Stop a Sound
*
* @param index
* - index of the sound to be stopped
*/
public static void stopSound(int index) {
mSoundPool.stop((Integer) mSoundPoolMap.get(index));
}
/**
* Deallocates the resources and Instance of SoundManager
*/
public static void cleanup() {
mSoundPool.release();
mSoundPool = null;
mSoundPoolMap.clear();
mAudioManager.unloadSoundEffects();
_instance = null;
}
public int getNumberOfSounds() {
// TODO Auto-generated method stub
return 0;
}
}嗯
final Button b1 = (Button)findViewById(R.id.Button1);
b1.setOnClickListener(new OnClickListener() {
int currentSound = 0;
public void onClick(View v) {
mSoundManager.playSound(currentSound, 0);
currentSound++;
currentSound %= mSoundmanager.getNumberOfSounds();
}
});
如果我正确理解您的代码,您希望在每次按下按钮时播放不同的声音。@EboMike right,每次按下按钮都会产生不同的声音效果。我不明白你的答案。好吧,有什么不明白的地方吗?@EboMike我如何对按钮1应用特定的声音?我想用我想要的声音来代替“当前声音”吗?最后,我将为每个按钮提供5个按钮和大约7个音效。你想要什么?您的示例使它看起来像每次按下按钮时都要循环播放一系列声音,这就是代码的作用
currentSound
是第一次按下按钮时将播放的声音。@EboMike我只是看不出该代码如何告诉按钮要循环播放哪些音效。我应该为每个按钮单独设置一个类吗?我上面的音效不都是按钮1的,只有1和6是。