【问题标题】:sounds not playing with mediaplayer after playing some sounds播放某些声音后,声音不与媒体播放器一起播放
【发布时间】:2018-03-15 15:29:52
【问题描述】:

我正在开发一个包含 100 种音效的 Android 应用程序。 在我播放了 25 个声音之后,我无法再播放了,我必须关闭应用程序并等待几分钟,然后再打开应用程序,现在我可以播放其他声音了。

final MediaPlayer mp81 = MediaPlayer.create(MainActivity.this, R.raw.a81);

我使用以下代码播放声音:

mp81.start();

我使用以下代码停止播放声音:

mp81.seekTo(0);

我也使用了stop() 方法,但问题仍然存在。 还有其他方法需要补充吗?

【问题讨论】:

  • 确保在播放一个声音时清理内存
  • 只是一个建议,对于这种任务 SoundPool 类可能有用

标签: android audio media-player playing


【解决方案1】:

请注意:考虑使用SoundPool 播放短音。

关于您的用例:您使用静态 create() 方法初始化您的 MediaPlayer 实例,这意味着您为每个声音创建一个新的 MediaPlayer 对象,而不是重用现有实例并仅更改数据源。这可能会对您的应用程序的性能产生负面影响。我建议你为你的声音创建一个路径数组,然后像这样实例化MediaPlayer

MediaPlayer mp = new MediaPlayer();
try {
     mp.setDataSource(yourArray[x]);
     mp.prepare();
     mp.start();
  } catch(Exception e){
    e.printStackTrace();
  }

更多信息请咨询MediaPlayer Document

【讨论】:

  • 我按照你说的做,但不幸的是我仍然遇到问题,应用程序也很快强制关闭
  • 请发布您的应用程序崩溃时出现的更新代码和 LogCat 消息
  • 这是我根据您上面提到的内容编写的代码。问题是在运行应用程序时没有播放声音,并且 logcat 说:setDataSource 在状态 8 中调用,请查看下面答案部分中的代码....
  • public void onClick(View v) { mp = MediaPlayer.create(Main.this, R.raw.a1); if (i[0] == false) {try {mp.setDataSource(source[0].toString());mp.start();} catch (Exception e) {e.printStackTrace();} b1.setBackgroundResource (R.drawable.stop_button); i[0] = true;}否则{mp.stop(); b1.setBackgroundResource(R.drawable.horn); i[0] = false;}}});
  • 尝试使用 new 初始化 MediaPlayer,然后调用 prepare() 或 prepareAsync()。我强烈建议您查阅我链接的 API 文档,MediaPlayer 比看起来更复杂
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多