Estou escrevendo um aplicativo de streaming de áudio que armazena em bufferPedaços de arquivo AAC, decodifica esses pedaços em matrizes de bytes do PCM e grava os dados de áudio do PCM no AudioTrack. Ocasionalmente, recebo o seguinte erro quando tento pular para uma música diferente, chamo AudioTrack.pause () ou AudioTrack.flush ():
obtainbuffer timed out -- is cpu pegged?
E então o que acontece é que uma fração de segundo deo áudio continua sendo reproduzido. Eu tentei ler um conjunto de arquivos AAC do sdcard e obtive o mesmo resultado. O comportamento que estou esperando é que o áudio pare imediatamente. Alguém sabe por que isso acontece? Gostaria de saber se é um problema de latência de áudio com o Android 2.3.
editar: o áudio AAC contém um cabeçalho ADTS. O cabeçalho + a carga útil do áudio constituem o que estou chamando de ADTSFrame. Eles são alimentados ao decodificador um quadro por vez. A matriz de bytes PCM resultante que é retornada da camada C para a camada Java é alimentada pela API AudioTrack do Android.
editar 2: eu tenho meu nexus 7 (sistema operacional Android 4.1) hoje. Carregou o mesmo aplicativo no dispositivo. Não tive nenhum desses problemas.
Respostas:
0 para resposta № 1é altamente possível sobre a taxa de amostragem. um de seus dispositivos pode suportar a taxa de amostragem usada, enquanto o outro não. Por favor verifique isto. Eu tive o mesmo problema, era sobre taxa de amostragem. use 44.1kHz (44100) e tente novamente por favor.