同时播放多个 SoundPool

Posted

技术标签:

【中文标题】同时播放多个 SoundPool【英文标题】:Playing multiple SoundPool at the same time 【发布时间】:2016-12-13 17:43:01 【问题描述】:

我有一个活动,我正在使用 12 个不同声音的按钮。如果用户同时单击两个按钮,则应同时播放按钮。

当我使用MediaPlayer 时,我无法做到这一点,然后我了解了SoundPool,一切都很好。但是有 12 种不同的声音,我不得不写这么多行,我不认为那是这样做的正确方法。

这是正确的方法吗,当我写这个 12 声音时,它变得很长?

SoundPool sp1,sp2,sp3;
int id1,id2,id3;

@Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.piano);

sp1 = new SoundPool(1, AudioManager.STREAM_MUSIC,1);
        sp2 = new SoundPool(1, AudioManager.STREAM_MUSIC,1);
        sp3 = new SoundPool(1, AudioManager.STREAM_MUSIC,1);

id1 = sp1.load(this,R.raw.p1,1);
        id2 = sp2.load(this,R.raw.p2,1);
        id3 = sp3.load(this,R.raw.p3,1);



public void p1Click(View v)
        
            sp1.play(id1,1,1,1,0,1);
        

public void p2Click(View v)
        
            sp2.play(id1,1,1,1,0,1);
        

public void p3Click(View v)
        
            sp3.play(id1,1,1,1,0,1);
        

【问题讨论】:

【参考方案1】:

您只需要一个SoundPool (sp1):

sp1 = new SoundPool(12, AudioManager.STREAM_MUSIC,1);
id1 = sp1.load(this,R.raw.p1,1);
id2 = sp1.load(this,R.raw.p2,1);
...
sp1.play(id1,1,1,1,0,1);
sp1.play(id2,1,1,1,0,1);
...

(1) 注意 12 表示您可以同时播放 12 种声音。 (2) 注意跟踪你的活动声音,以后会有用。 (sp1.play 返回一个整数):

int streamID = sp1.play(id1,1,1,1,0,1);

【讨论】:

以上是关于同时播放多个 SoundPool的主要内容,如果未能解决你的问题,请参考以下文章

如何同时播放多个音频文件

在javascript中同时播放多个声音

Java 同时播放多个 Clips

iOS 多个播放器同时播放,双击全屏,单击退出全屏

同时播放多个音频

在 Java 中同时播放多个字节数组