【问题标题】:Cant play sound more then 7 times in android在android中不能播放声音超过7次
【发布时间】:2015-11-17 10:33:59
【问题描述】:

当我在 android 中播放声音文件时出现此错误:

11-17 15:58:14.482 158-20904/? E/OMXNode实例: setConfig(f3f:google.mp3.decoder, ConfigPriority(0x6f800002)) 错误: 未定义(0x80001001)11-17 15:58:14.482 158-20904/? I/ACodec:编解码器 不支持配置优先级 (err -2147483648) 11-17 15:58:14.483 158-20904/? I/MediaCodec:MediaCodec 将在异步模式下运行 11-17 15:58:14.488 158-20902/? E/AudioFlinger:内存不足 音轨大小=131176 11-17 15:58:14.488 158-20902/? D/内存经销商: AudioTrack (0xb731c9f0, size=1048576) 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 0: 0xb94bbdf8 | 0x00000000 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 1: 0xb94bbe28 | 0x00020080 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 2: 0xb7bb4438 | 0x00040100 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 3: 0xb7be71f8 | 0x00060180 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 4: 0xb94bbca8 | 0x00080200 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 5: 0xb7321998 | 0x000A0280 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 6: 0xb73883d0 | 0x000C0300 | 0x00020080 | 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler: 7: 0xb9e4f420 | 0x000E0380 | 0x0001FC80 | F 11-17 15:58:14.488 158-20902/? D/MemoryDe​​aler:分配的大小:918400 (896 KB) 11-17 15:58:14.488 158-20902/? E/AudioFlinger: createTrack_l() initCheck failed -12;不 控制块? 11-17 15:58:14.488 158-20902/?电子/音轨: AudioFlinger 无法创建轨道,状态:-12 11-17 15:58:14.488 158-20902/? E/AudioSink:无法创建音轨 11-17 15:58:14.488 158-20902/? W/NuPlayerRenderer:openAudioSink:非 卸载打开失败状态:-19 11-17 15:58:14.488 158-20902/? W/NuPlayerRenderer:onDrainAudioQueue():音频接收器未准备好 11-17 15:58:14.489 158-20902/? W/NuPlayerRenderer: onDrainAudioQueue(): 音频接收器未准备好 11-17 15:58:14.489 158-20902/? W/NuPlayerRenderer:onDrainAudioQueue():音频接收器未准备好 11-17 15:58:14.490 158-20902/? W/NuPlayerRenderer: onDrainAudioQueue(): 音频接收器未准备好

这是我的代码:

公共无效playSound(int n) { 尝试 { Log.e("n 值为", "" + n); 布尔 mStartPlaying = true; 如果(mStartPlaying == true){ mPlayer = 新媒体播放器(); uri uri = Uri.parse("android.resource://packagename/" + beeb.mp3); mPlayer.setOnCompletionListener(soundListener); mPlayer.setDataSource(getContext(), uri); mPlayer.prepare(); mPlayer.setLooping(false); mPlayer.start(); } 别的 { // 停止播放(); //rePlay.setText("重播"); mPlayer.stop(); mPlayer.release(); mPlayer = null; } mStartPlaying = !mStartPlaying; } 捕捉(IOException e){ Log.e("ERR", "prepare() failed"); } }

【问题讨论】:

  • 你是怎么播放声音文件的,是通过代码吗?
  • Uri uri = Uri.parse("android.resource://fsu.android.RotaryDialer/" + activity.SOUNDS_R[n]); mPlayer.setOnCompletionListener(soundListener); mPlayer.setDataSource(getContext(), uri); mPlayer.prepare(); mPlayer.setLooping(false); mPlayer.start();
  • 看起来,您遇到了内存问题:AudioFlinger:AudioTrack size 没有足够的内存
  • 是的,但我不知道如何解决这个问题。
  • 通过正确发布您的代码,编辑您的帖子。

标签: android media


【解决方案1】:

我发现这个问题是由于没有充分释放媒体播放器引起的。在没有正确释放的情况下,它似乎可以继续播放 6 次,但到了 7 次它必须开始释放线程。

在启动媒体播放器或使用 create 命令之前,检查它是否为空,如果不为空,请清理它。如果它正在播放或循环播放,请先停止它。一旦它停止,然后释放它,然后使其为空。完成后,您应该可以安全地使用 create 命令并开始播放了。

   if (mp != null){
        if (mp.isPlaying()||mp.isLooping()) {
            mp.stop();
        }
        mp.release();
        mp = null;
    }


    mp = MediaPlayer.create(this,R.raw.sound);   // note that R = res folder, raw = raw subfolder holding my audio files, and sound is the name of one of the audio files


    mp.start();

【讨论】:

猜你喜欢
  • 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
相关资源
最近更新 更多