Libgdx: LWJGL2 OpenALMusic - Tidak dapat mengalokasikan buffer audio. Kesalahan AL: 40963

Dibuat pada 20 Jul 2018  ·  3Komentar  ·  Sumber: libgdx/libgdx

Detail masalah

Ini adalah bug yang sangat sulit untuk direproduksi. Dari laporan kerusakan yang saya terima dari pemain, itu muncul secara acak jika seseorang melakukan jeda(), setPosition(), play() atau membuang() berulang kali. Saya tidak yakin apakah perangkat kerasnya terkait atau karena beberapa masalah waktu. Meskipun saya dapat mereproduksinya secara konsisten dengan kode yang mirip dengan #5316 , saya cukup yakin itu tidak terkait.

Langkah/kode reproduksi

Hanya render() dari ApplicationListener kosong:

            Music music = null;

            <strong i="9">@Override</strong>
            public void render() {
                int frameNumber = (int)Gdx.graphics.getFrameId();
                Gdx.app.log("CRASH", "Frame " + frameNumber);
                switch (frameNumber) {
                    case 0:
                        // Frame 1
                        music = Gdx.audio.newMusic(Gdx.files.external("any_audio_file.ogg"));
                        music.play();
                        break;

                    case 1:
                        // Frame 2
                        music.setPosition(26.300f);     // must be within at least 200ms from the end
                        break;

                    case 2:
                        // Frame 3
                        music.setPosition(26.300f);     // must be within at least 200ms from the end
                        break;

                    case 3:
                        // Frame 4
                        music.dispose();
                        break;

                    case 4:
                        // Frame 5
                        music = Gdx.audio.newMusic(Gdx.files.external("any_audio_file.ogg"));
                        music.play();       // Crashes here
                        break;
                }
            }

Versi LibGDX dan/atau dependensi yang relevan

1.9.9-SNAPSHOT

Stacktrace

com.badlogic.gdx.utils.GdxRuntimeException: Unable to allocate audio buffers. AL Error: 40963
    at com.badlogic.gdx.backends.lwjgl.audio.OpenALMusic.play(OpenALMusic.java:83)
    at game27.DesktopMain$2.render(DesktopMain.java:270)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)

Silakan pilih platform yang terpengaruh

  • [ ] Android
  • [ ] iOS (robovm)
  • [ ] iOS (MOE)
  • [ ] HTML/GWT
  • [X] Jendela
  • [ ] Linux
  • [ ] MacOS
audio desktop

Komentar yang paling membantu

saya dapat mereproduksi dengan libgdx MusicTest.

Kasus pertama:

  • jalankan contoh WAV dengan perulangan dinonaktifkan
  • bermain dengan kursor bolak-balik beberapa kali
  • biarkan lagunya selesai
  • Anda tidak dapat memulai lagu (gagal secara diam-diam)

Kasus kedua:

  • jalankan contoh WAV dengan perulangan dinonaktifkan
  • bermain dengan kursor bolak-balik beberapa kali
  • ubah musik (mp3 atau ogg) sebelum selesai
  • crash : Unable to allocate audio buffers. AL Error: 40963

libgdx kode benar unqueue buffer tetapi sesuai OpenAL doc : The unqueue operation will only take place if all n buffers can be removed from the queue. mungkin OpenAL tidak dapat membatalkan beberapa buffer berjalan yang menyebabkan semacam akumulasi karena alokasi/frekuensi bebas.

Mungkin penggunaan semacam itu ekstrem dan mungkin Suara harus digunakan sebagai gantinya.

Semua 3 komentar

saya dapat mereproduksi dengan libgdx MusicTest.

Kasus pertama:

  • jalankan contoh WAV dengan perulangan dinonaktifkan
  • bermain dengan kursor bolak-balik beberapa kali
  • biarkan lagunya selesai
  • Anda tidak dapat memulai lagu (gagal secara diam-diam)

Kasus kedua:

  • jalankan contoh WAV dengan perulangan dinonaktifkan
  • bermain dengan kursor bolak-balik beberapa kali
  • ubah musik (mp3 atau ogg) sebelum selesai
  • crash : Unable to allocate audio buffers. AL Error: 40963

libgdx kode benar unqueue buffer tetapi sesuai OpenAL doc : The unqueue operation will only take place if all n buffers can be removed from the queue. mungkin OpenAL tidak dapat membatalkan beberapa buffer berjalan yang menyebabkan semacam akumulasi karena alokasi/frekuensi bebas.

Mungkin penggunaan semacam itu ekstrem dan mungkin Suara harus digunakan sebagai gantinya.

Saya memiliki kesalahan yang sama persis di Windows :( - Ada berita tentang ini?

Skenario:

  • Memutar Musik satu
  • Pemain memilih beberapa tindakan
  • Menghentikan Musik satu
  • Mulai Musik dua
  • Crash dengan Tidak dapat mengalokasikan buffer audio. Kesalahan AL: 40963

Juga terjadi dengan LWJGL3, belum menemukan solusi sejauh ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat