按下按钮时循环播放声音

Posted

技术标签:

【中文标题】按下按钮时循环播放声音【英文标题】:Loop a sound while a button is pressed 【发布时间】:2012-10-21 11:22:50 【问题描述】:

我正在尝试在。

当我按下按钮让事件“MotionEvent.ACTION_DOWN”不会停止运行声音时,我怎么能这样做?我这样做的方式只运行一次。我已经尝试将return语句更改为false,但它不起作用。

setLoop MediaPlayer 选项对我没有帮助,因为我想继续播放新的声音,尽管当前声音没有完成播放。

这是我的代码:

public boolean onClick(View v, MotionEvent event) 
    if(event.getAction() == MotionEvent.ACTION_DOWN)
        //here should not stop running the soundPool
        soundPool.play(R.raw.sound1, 1, 1, 1, 0, 1);
    
    if(event.getAction() == MotionEvent.ACTION_UP)
        // stop running the soundpool
    
    return true;

【问题讨论】:

【参考方案1】:

将第五个参数替换为 -1 :

soundPool.play(R.raw.sound1, 1, 1, 1, -1, 1);

从play() doc 开始,第五 参数loop 采用 0(= 无循环)或 -1(= 永远循环)

【讨论】:

它产生相同的声音循环,我想将声音作为一个新的独立声音池多次运行,而不允许它停止其他声音的执行。为了给你一个想法,我想播放机枪多次播放子弹的声音。 是的,它只是一个原始的子弹声音,但我不想循环它,我想在事件是 ACTION_DOWN 时重复执行此 soundPool。我想这样做是因为我想在前一个声音结束之前开始一个新的声音,而不是失去子弹射击声音的回声。问题是 ACTION_DOWN 只响应一次,我希望始终是一个活跃的监听器。谢谢!如果我没有正确解释,请原谅我。 好的。我不确定,但您可以尝试实现 OnTouchListener 而不是 OnClickListener 并以与 onClick 相同的方式覆盖 onTouch 方法。【参考方案2】:

return false; 替换为return true;。获取ACTION_UP 的唯一方法是返回true 以通知android 系统您将处理整个onClick 事件。

【讨论】:

以上是关于按下按钮时循环播放声音的主要内容,如果未能解决你的问题,请参考以下文章

当我按下快速播放按钮时,声音播放失败

同时播放两个声音c#

Android soundpool 循环逻辑

在 Swift 中重复播放声音文件?

进入下一帧/错误时如何停止循环声音

如何在播放/暂停控制功能中停止无限循环