Android:如何循环音效?

时间:2011-03-02 23:59:15

标签: 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.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;
}

}

1 个答案:

答案 0 :(得分:1)

... Ehhmm

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();
    }
});

如果我理解你的代码是正确的,那么每次按下按钮时你都想播放不同的声音。