android - 无法在 android 中播放超过 7 次的声音

标签 android media

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

11-17 15:58:14.482 158-20904/? E/OMXNodeInstance: setConfig(f3f:google.mp3.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001) 11-17 15:58:14.482 158-20904/? I/ACodec: codec does not support config priority (err -2147483648) 11-17 15:58:14.483 158-20904/? I/MediaCodec: MediaCodec will operate in async mode 11-17 15:58:14.488 158-20902/? E/AudioFlinger: not enough memory for AudioTrack size=131176 11-17 15:58:14.488 158-20902/? D/MemoryDealer: AudioTrack (0xb731c9f0, size=1048576) 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 0: 0xb94bbdf8 | 0x00000000 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 1: 0xb94bbe28 | 0x00020080 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 2: 0xb7bb4438 | 0x00040100 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 3: 0xb7be71f8 | 0x00060180 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 4: 0xb94bbca8 | 0x00080200 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 5: 0xb7321998 | 0x000A0280 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 6: 0xb73883d0 | 0x000C0300 | 0x00020080 | A 11-17 15:58:14.488 158-20902/? D/MemoryDealer: 7: 0xb9e4f420 | 0x000E0380 | 0x0001FC80 | F 11-17 15:58:14.488 158-20902/? D/MemoryDealer: size allocated: 918400 (896 KB) 11-17 15:58:14.488 158-20902/? E/AudioFlinger: createTrack_l() initCheck failed -12; no control block? 11-17 15:58:14.488 158-20902/? E/AudioTrack: AudioFlinger could not create track, status: -12 11-17 15:58:14.488 158-20902/? E/AudioSink: Unable to create audio track 11-17 15:58:14.488 158-20902/? W/NuPlayerRenderer: openAudioSink: non offloaded open failed status: -19 11-17 15:58:14.488 158-20902/? W/NuPlayerRenderer: onDrainAudioQueue(): audio sink is not ready 11-17 15:58:14.489 158-20902/? W/NuPlayerRenderer: onDrainAudioQueue(): audio sink is not ready 11-17 15:58:14.489 158-20902/? W/NuPlayerRenderer: onDrainAudioQueue(): audio sink is not ready 11-17 15:58:14.490 158-20902/? W/NuPlayerRenderer: onDrainAudioQueue(): audio sink is not ready

这是我的代码:


    public void playSound(int n) 
    {
       try {
                Log.e("n value is", "" + n);
                boolean mStartPlaying = true;
                if (mStartPlaying == true) {
                    mPlayer = new MediaPlayer();

                    Uri uri = Uri.parse("android.resource://packagename/" + beeb.mp3);
                    mPlayer.setOnCompletionListener(soundListener);
                    mPlayer.setDataSource(getContext(), uri);
                    mPlayer.prepare();
                    mPlayer.setLooping(false);
                    mPlayer.start();

                } else {
                    //   stopPlaying();
                    //rePlay.setText("Replay");
                    mPlayer.stop();
                    mPlayer.release();
                    mPlayer = null;
                }
                mStartPlaying = !mStartPlaying;


            } catch (IOException e) {
                Log.e("ERR", "prepare() failed");
            }
        }

最佳答案

我已经看到由于未充分释放媒体播放器而导致的问题。它似乎可以在没有适当释放的情况下继续播放 6 次,但在 7 次时它必须开始释放线程。

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

   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();

关于android - 无法在 android 中播放超过 7 次的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33754709/

相关文章:

html - 网页到打印媒体——解决方案?

android - 微调器适用于 2.3 但不适用于 3.2

android - 在 RecyclerView 中第二次滚动后项目的值不同

android - 传递信息不适用于 Intent

android - 如何更新 Android 媒体数据库

javascript - 在浏览器上设置网络媒体页面样式

java - 在 Android 中获取 Facebook 页面状态更新列表

java - 使用支持库 v4 在 fragment 中获取对 GoogleMap 的引用

jquery - 响应式表格仅适用于 Firefox

css - 使用媒体查询