MediaPlayer vs SoundPool 仅用于 1 个同时流

Posted

技术标签:

【中文标题】MediaPlayer vs SoundPool 仅用于 1 个同时流【英文标题】:MediaPlayer vs SoundPool for only 1 simultaneous stream 【发布时间】:2011-03-17 11:21:18 【问题描述】:

我正在开发一款游戏,每次摇晃手机时都会播放一个声音。 在我的activity的onCreate中使用SoundPool并加载声音是否有意义,或者每次都创建一个媒体播放器是否可以,如下所示:

private void onShake() 
    MediaPlayer mp= MediaPlayer.create(this, whipSound[currentWhip][force]);   
    mp.start();

我的猜测是 SoundPool 更好,因为声音只加载一次。我说的对吗?

谢谢

朱利安

【问题讨论】:

【参考方案1】:

正如预期的那样,SoundPool 更快...

【讨论】:

【参考方案2】:

您可以在onShake 方法之外创建 mediaPlayer,然后在每次摇动时重置并启动它:

MediaPlayer mp= MediaPlayer.create(this, whipSound[currentWhip][force]);
...
private void onShake() 
    mp.reset();
    mp.start();


//or

private void onShake() 
   try 
        mp.stop();
        mp.prepare();
     catch (IllegalStateException e)  /* Ignore */
     catch (IOException e) /* Ignore */ 
   try  
        mp.start(); 
     catch (IllegalStateException e) 
        Log.e(TAG, "MediaPlayer failed ", e);
   

【讨论】:

我必须每次都加载声音,因为它可能会根据震动强度而有所不同。我用过 SoundPool,它的速度要快得多。

以上是关于MediaPlayer vs SoundPool 仅用于 1 个同时流的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 中的 SoundPool 到 MediaPlayer

SoundPool 和 MediaPlayer 音量对应问题

Android - MediaPlayer/SoundPool 性能?

SoundPool 和 MediaPlayer 的并发性?

android中常见声音操作方式(Ringtone,SoundPool,MediaPlayer)小结

MediaPlayer 或 SoundPool 用于多个短声音?