【问题标题】:Playing random sound from raw folder从原始文件夹播放随机声音
【发布时间】:2014-02-12 18:51:24
【问题描述】:

我目前有一个 SoundPool 可以在屏幕抖动时加载并播放一个声音,我将如何让它在每次屏幕抖动时播放不同的声音?

编辑---

private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
SoundPool sp;
int soundOne;
int soundTwo;
int soundThree;

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    //Shake sound
    sp =  new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    soundOne = sp.load(this, R.raw.one, 1);
    soundTwo = sp.load(this, R.raw.two, 1);
    soundThree = sp.load(this, R.raw.three, 1);     

    //Shake
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorListener = new ShakeEventListener();   
    mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

        public void onShake() {
            if (acceptCheck == 1)
            {
                sp.play(soundOne, 1, 1, 0, 0, 1);
            }
        }
      });




}

【问题讨论】:

  • 你必须将所有你想从中挑选的声音加载到一个列表中,然后选择一个随机索引。如果您需要更多帮助,您将需要发布更多代码。
  • 我已经更新了我所拥有的,正如您在 onShake 中看到的那样,它仅设置为播放 soundOne,我需要如何调整它以随机播放其中一种声音?跨度>

标签: java android eclipse random soundpool


【解决方案1】:

只需使用整数列表,而不是单独存储它们:

private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
SoundPool sp;
List<Integer> mSounds = new ArrayList<Integer>();
private Random mRandom = new Random();

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test);
    //Shake sound
    sp =  new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    mSounds.add(sp.load(this, R.raw.one, 1));
    mSounds.add(sp.load(this, R.raw.two, 1));
    mSounds.add(sp.load(this, R.raw.three, 1);     

    //Shake
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mSensorListener = new ShakeEventListener();   
    mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {

        public void onShake() {
            if (acceptCheck == 1)
            {
                sp.play(mSounds.get(mRandom.nextInt(mSounds.size())), 1, 1, 0, 0, 1);
            }
        }
      });
}

【讨论】:

    【解决方案2】:

    首先,您可以创建一个包含所有原始引用的数组:

    private int[] rawRef = {R.raw.1,R.raw.2,R.raw.3,R.raw.4,R.raw.5};
    

    那么你需要一个方法来播放你的音频:

    私人随机随机=新随机(); 私人无效播放(){ 媒体播放器mp; 尝试 { mp = MediaPlayer.create(this, rawRef[random.nextInt(rawRef.length)]); mp.start(); } 捕捉(异常 e){ Log.e("错误", "媒体播放器", e); mp = 空; } }

    对于声音池

    私有列表池 = new ArrayList(); 私人 SoundPool sp; 私人无效负载声音(){ sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0); pool.add(sp.load(context, R.raw.1, 1)); pool.add(sp.load(context, R.raw.2, 1)); pool.add(sp.load(context, R.raw.3, 1)); pool.add(sp.load(context, R.raw.4, 1)); } 私人无效播放(){ sp.play(pool.get(random.nextInt(pool.size()), 1, 1, 0, 0, 1); }

    【讨论】:

    • 我正在使用 SoundPool,因为它们是非常短的剪辑,无论如何要调整它以使用 SoundPool?
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2020-09-12
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多