Creé una aplicación simple que genera una onda cuadrada de frecuencia determinada y la reproduce usando AudioTrack en modo STREAM (STREAM_MUSIC). Todo parece estar funcionando bien y el sonido se reproduce bien, sin embargo, cuando la corriente está terminado recibo mensajes en el registro:Reinicio de AudioTrack incluso después de detenerlo
W/AudioTrack (7579): obtainBuffer() pista 0x14c228 discapacitados, reiniciando ...
Incluso después de llamar a la función stop() todavía los obtengo. Creo que configuré correctamente el tamaño del búfer de AudioTrack, en función del tamaño mínimo requerido por AudioTrack (en mi caso, 6x1024). Lo alimento con pequeños amortiguadores de 1024 pantalones cortos.
¿Está bien que los obtenga y debería dejarlo así?
Ese es el punto - llenar el buffer con los datos antes de llamar a juego. Luego asegúrate de que puedes generar los datos a tiempo. Tendrás latencia y depende de tu teléfono (tamaño de búfer mínimo), frecuencia de muestreo y resolución dinámica que usas. Soy mi caso (HTC Desire) 6kB. Esto es alrededor de 3000 muestras de 16 bits mono. Puede calcular fácilmente la latencia resultante teniendo en cuenta la frecuencia de muestreo. Si usas la API de audio nativa, puedes obtener latencias mucho más pequeñas, pero lejos de los 5 millones de iPhone ... –