Quando tento reproduzir música no Android 2.3 (usando vários players, incluindo o PowerAmp) no Sony Ericsson Xperia X10, não recebo som confiável. A música faz uma pausa breve, por exemplo, quando:
- Eu pressiono o botão
request_suspend_state: sleep;request_suspend_state: wakeup
liga / desliga (especialmente repetidamente) ( em dmesg) - Quando vejo mensagens como
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
no dmesg - Quando algum programa reage à orientação da tela alterada.
- Quando a conexão wifi é estabelecida, quando eu a forço a "reassociar"
- Quando vou para / do aplicativo na tela inicial (AWDLauncher), exceto para / da tela do WidgetLocker.
- Quando ativo / desativo o Modo Avião.
- Quando a tela está desligada (a mais irritante)
Quando a única maneira realmente estável de tocar música é usar o StayAwake para forçar a exibição, desligar o Wi-Fi, ativar o Modo Avião e não alternar entre aplicativos. Iniciar porcos da CPU como while true; do true; done
não afeta o corte.
E estava jogando mais ou menos bem no Android 2.1.
O processo "mediaserv" (que grava em / dev / msm_pcm_out) possui prioridade em tempo real de io e agendamento, mas mesmo assim o som é instável. Se eu começar a jogar no console com mplayer -ao pcm:file=/dev/msm_pcm_out
o som cortado menos (principalmente, ele não é interrompido pelo botão liga / desliga / carrega vários processos pesados), mas ainda não se comporta normalmente quando a tela está desligada (até ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
está irregular)
Quando inicio a música A da maneira usual e a música B usando o mplayer para / dev / msm_pcm_out (misturando-as), a música A faz um som mais que o normal e geralmente ouço B quando A está no ponto. Quando desligo a tela, os botões A e B são sincronizados (parar B leva a uma reprodução relativamente mais fluente de A dessa maneira).
Como tocar música no Android de forma confiável na presença de carregamento em segundo plano? Devo relatar um bug em algum lugar?
Atualização Encontrei uma maneira de tocar música. Inconveniente, mas sem cortar :
- Inicie o WakeLock no modo "CPU ativada, tela desativada, teclado desativado"
- Use o mplayer para reproduzir músicas ignorando o 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)
Reproduz sem cortar, não importa quantas aplicações eu inicie, o que fazer com os modos Wifi, orientação e avião. Mesmo com o governador "powersave" do cpufreq (tudo muito lento, mas a música toca bem). Portanto, o hardware tem recursos suficientes para reproduzi-lo.
Atualização 2 Parece fazer
for i in `pgrep ''`; do schedtool -D $i; done
ou seja, "Definir prioridade ociosa para todos os processos" faz com que a música seja reproduzida bem, mesmo quando eu inicio programas, bloqueio a tela, giro a tela; ela se reconecta a outras estações de rede móvel, à custa de algum atraso de entrada nos jogos. Não sei exatamente por que isso acontece.