Cuando intento reproducir música en Android 2.3 (usando varios reproductores, incluido PowerAmp) en Sony Ericsson Xperia X10, no obtengo un sonido confiable. La música se detiene brevemente, por ejemplo, cuando:
- Presiono el botón de encendido (especialmente repetidamente) (
request_suspend_state: sleep;request_suspend_state: wakeup
en dmesg) - Cuando veo mensajes como
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
en dmesg - Cuando algún programa reacciona a la orientación cambiada de la pantalla.
- Cuando se establece la conexión wifi, cuando la fuerzo a "reasociarse"
- Cuando voy a / desde la aplicación desde la pantalla de inicio (AWDLauncher), excepto a / desde la pantalla WidgetLocker.
- Cuando habilito / deshabilito el Modo avión.
- Cuando la pantalla está apagada (lo más molesto)
Cuando la única forma realmente estable de reproducir música es usar StayAwake para forzar la visualización, apagar el Wi-Fi, activar el Modo avión y no cambiar de aplicación. Iniciar CPU Hogs como while true; do true; done
no afecta el corte.
Y estaba jugando más o menos bien en Android 2.1.
El proceso "mediaserv" (que escribe en / dev / msm_pcm_out) tiene prioridad de programación y de io en tiempo real, pero el sonido es irregular de todos modos. Si comienzo a jugar desde la consola con mplayer -ao pcm:file=/dev/msm_pcm_out
el sonido picado menos (en particular, no se interrumpe con el botón de encendido / cargando racimos de procesos pesados), pero aún no se comporta normalmente cuando la pantalla está apagada (incluso ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
está entrecortada)
Cuando comienzo la música A de la manera habitual y la música B usando mplayer para / dev / msm_pcm_out (mezclándolas), la música A suena más de lo normal y generalmente escucho B cuando A está en chop. Cuando apago la pantalla, tanto A como B se sincronizan (detener B conduce a una reproducción relativamente más fluida de A de esta manera).
¿Cómo reproducir música en Android de manera confiable en presencia de carga de fondo? ¿Debo informar un error en alguna parte?
Actualización Se encontró una forma de reproducir música. Inconveniente, pero sin cortar :
- Inicie WakeLock en modo "CPU encendida, pantalla apagada, teclado apagado"
- Use mplayer para reproducir música sin pasar por Android:
ionice -c1 -n4 \
schedtool -R -p 3 -e \
mplayer -really-quiet \
-af volume=-26 -quiet \
-ao pcm:file=/dev/msm_pcm_out,nowaveheader \
/mnt/sdcard/music/something.ogg
# (created script to start it easily, of course)
Juega sin cortar, no importa cuántas aplicaciones inicie, qué hago con Wifi, orientación y modos de avión. Incluso con el gobernador cpufreq "powersave" (todo muy lento, pero la música suena bien). Entonces el hardware tiene suficientes recursos para jugarlo.
Actualización 2 Parece que hacer
for i in `pgrep ''`; do schedtool -D $i; done
es decir, "Establecer prioridad de inactividad para todos los procesos" hace que la música suene bien incluso cuando yo {inicio programas, bloqueo de pantalla, girar pantalla; se reconecta a otras estaciones de red móvil} a expensas de algún retraso de entrada en los juegos. No sé exactamente por qué sucede.