Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:我如何循环声音效果?_Java_Android_Audio_Soundpool - Fatal编程技术网

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是。