AudioLoader
chama scope.manager.itemEnd
(através do carregador de arquivos) após carregar o buffer, mas seu próprio onLoad
após decodificá-lo. Como a decodificação do buffer é assíncrona (ou, pelo menos, tem um retorno de chamada), você pode entrar em uma condição de corrida se o carregador de áudio for o último carregador na fila do gerenciador de carregamento, onde o gerente pensa que todos os seus itens foram concluídos, mas os carregadores individuais não terminou de analisar. Percebemos isso em nossa situação de pré-carregamento e tivemos que implementar nossa própria fila de carregamento que usava onLoad
por item para marcar itens completos.
Infelizmente, olhando a fonte FileLoader / AudioLoader, não tenho certeza de como consertar isso ou se é mesmo uma preocupação; talvez a solução mais fácil é apenas esclarecer nos documentos que LoadingManager#onLoad
apenas indica que a solicitação de rede foi concluída e não indica que os dados foram analisados.
Hmm, então eu acho que AudioLoader não deveria passar o gerenciador para FileLoader
e chamar as próprias funções?
Isso definitivamente resolveria isso para um gerenciador de carregamento personalizado. O gerenciador de carregamento padrão ainda ignoraria o retorno de chamada de decodificação, mas quantas pessoas usam o gerenciador de carregamento padrão neste contexto?
Eu experimentei o mesmo problema. No momento não é possível reproduzir um arquivo de áudio com segurança depois que o callback dos gerenciadores onLoad
disparou.
Comentários muito úteis
Hmm, então eu acho que AudioLoader não deveria passar o gerenciador para
FileLoader
e chamar as próprias funções?