Libgdx: LWJGL2 OpenALMusic - Não é possível alocar buffers de áudio. Erro AL: 40963

Criado em 20 jul. 2018  ·  3Comentários  ·  Fonte: libgdx/libgdx

Detalhes do problema

Este é um bug realmente difícil de reproduzir. Dos relatórios de travamento que recebo dos jogadores, ele aparece aleatoriamente se alguém pausa (), setPosition (), play () ou descarte () repetidamente. Não tenho certeza se o hardware está relacionado ou devido a algum problema de tempo. Embora eu possa reproduzi-lo consistentemente com um código semelhante a #5316 , tenho certeza de que não está relacionado.

Etapas/código de reprodução

Apenas o render() de um ApplicationListener vazio:

            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;
                }
            }

Versão do LibGDX e/ou dependências relevantes

1.9.9-INSTANTÂNEO

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)

Selecione as plataformas afetadas

  • [ ] Android
  • [ ] iOS (robovm)
  • [ ] iOS (MOE)
  • [ ] HTML/GWT
  • [X] Janelas
  • [ ] Linux
  • [ ] Mac OS
audio desktop

Comentários muito úteis

eu sou capaz de reproduzir com o MusicTest libgdx.

Primeiro caso:

  • execute o exemplo WAV com loop desativado
  • jogue com o cursor para frente e para trás várias vezes
  • deixe a música terminar
  • você não pode iniciar a música (ela falha silenciosamente)

Segundo caso:

  • execute o exemplo WAV com loop desativado
  • jogue com o cursor para frente e para trás várias vezes
  • mude a música (mp3 ou ogg) antes de terminar
  • ele trava: Unable to allocate audio buffers. AL Error: 40963

O código libgdx desencadeia corretamente os buffers, mas de acordo com OpenAL doc : The unqueue operation will only take place if all n buffers can be removed from the queue. talvez o OpenAL não possa cancelar alguns buffers em execução que levam a um tipo de acumulação devido à alocação/frequência livre.

Talvez esse tipo de uso seja extremo e talvez o som deva ser usado.

Todos 3 comentários

eu sou capaz de reproduzir com o MusicTest libgdx.

Primeiro caso:

  • execute o exemplo WAV com loop desativado
  • jogue com o cursor para frente e para trás várias vezes
  • deixe a música terminar
  • você não pode iniciar a música (ela falha silenciosamente)

Segundo caso:

  • execute o exemplo WAV com loop desativado
  • jogue com o cursor para frente e para trás várias vezes
  • mude a música (mp3 ou ogg) antes de terminar
  • ele trava: Unable to allocate audio buffers. AL Error: 40963

O código libgdx desencadeia corretamente os buffers, mas de acordo com OpenAL doc : The unqueue operation will only take place if all n buffers can be removed from the queue. talvez o OpenAL não possa cancelar alguns buffers em execução que levam a um tipo de acumulação devido à alocação/frequência livre.

Talvez esse tipo de uso seja extremo e talvez o som deva ser usado.

Eu tenho exatamente o mesmo erro no Windows :( - Alguma notícia sobre isso?

Cenário:

  • Tocando música um
  • O jogador seleciona alguma ação
  • Parando a música um
  • Iniciar música dois
  • Falha com Não é possível alocar buffers de áudio. Erro AL: 40963

Também acontece com LWJGL3, não encontrei uma solução até agora.

Esta página foi útil?
0 / 5 - 0 avaliações