【问题标题】:MediaPlayer start delay when click on button单击按钮时 MediaPlayer 启动延迟
【发布时间】:2018-04-04 13:10:36
【问题描述】:

当用户点击按钮时,我想播放 res/raw 文件夹中的 mp3 文件

我的代码如下:

btn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        MediaPlayer mp = MediaPlayer.create(MainActivity.this,
        R.raw.click);
        mp.start();
    }
});

运行良好,但在单击按钮后需要一些时间来播放。请任何人,给我一个解决方案。 谢谢

【问题讨论】:

  • 把这个MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.click);在 onCreate() 并在 onclick 回调中启动媒体播放器
  • 感谢您的回答,我会尝试并告诉您是否有效。
  • 我建议不要使用 MediaPlayer 而是使用 ExoPlayer。它可扩展、稳定,可以播放多种不同类型的媒体。你可以在这里找到它:github.com/google/ExoPlayer
  • 第一个解决方案非常适合我!!谢谢。
  • 另外,还可以在创建后做mp.prepare()。

标签: android android-mediaplayer


【解决方案1】:

加载时间取决于 MediaPlayer 的缓冲区大小(在固件中硬编码),并且无法更改它。阅读更多here。

【讨论】:

  • 感谢您的回答!!
【解决方案2】:

选项 1:

不用创建媒体播放器,然后在按钮的onClick中调用start()方法,可以在activity的onCreate()中初始化mediaPlayer。

至于按钮点击实现,只需要调用mediaPlayer.start()即可。

选项 2: 您可以使用 Android 提供的SoundPool API。与 MediaPlayer API 相比,这具有更低的延迟。 SoundPool 主要用于播放短片。

【讨论】:

  • @SahdevRajput74 如果任何答案对您有帮助并解决您的问题,那么您可以标记为正确:i.stack.imgur.com/DGNzO.png
【解决方案3】:

这是媒体播放器buffer size 的结果。

尝试使用SoundPool 以获得更灵敏的播放。你可以看到它的实现here。

SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
HashMap<Integer, Integer> soundPoolMap soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(soundID, soundPool.load(this, R.raw.click, 1));

以soundPool.play(soundId, 1, 1, 1, 0, 0); 开始声音

【讨论】:

  • 感谢您的回答,我能给 soundID 赋予什么价值??
  • 如果你只有一个音频片段要播放,那么你可以这样做: int soundId = soundPool.load(this, R.raw.click, 1); soundPool.play(soundId, 1, 1, 1, 0, 0);
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-31
  • 1970-01-01
相关资源
最近更新 更多