Quando provo a riprodurre musica su Android 2.3 (utilizzando vari lettori, incluso PowerAmp) su Sony Ericsson Xperia X10, non riesco ad ottenere un suono affidabile. La musica viene messa in pausa per un breve periodo, ad esempio quando:
- Premo il pulsante di accensione (specialmente ripetutamente) (
request_suspend_state: sleep;request_suspend_state: wakeup
in dmesg) - Quando vedo messaggi come
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
in dmesg - Quando alcuni programmi reagiscono al cambiamento di orientamento dello schermo.
- Quando viene stabilita la connessione wifi, quando la costringo a "riassociare"
- Quando vado a / dall'applicazione dalla schermata principale (AWDLauncher), tranne che per / dalla schermata WidgetLocker.
- Quando abilito / disabilito la Modalità aereo.
- Quando il display è spento (il più fastidioso)
Quando l'unico modo davvero stabile per riprodurre musica è utilizzare StayAwake per forzare la visualizzazione, disattivare il Wi-Fi, attivare la Modalità aereo e non cambiare applicazione. L'avvio di hog della CPU come while true; do true; done
non influisce sul taglio.
E stava giocando più o meno bene su Android 2.1.
Il processo "mediaserv" (che scrive in / dev / msm_pcm_out) ha priorità io e pianificazione in tempo reale, ma il suono è comunque instabile. Se comincio a giocare dalla console con mplayer -ao pcm:file=/dev/msm_pcm_out
il sound chop di meno (in particolare non viene interrotto dal pulsante di accensione / caricamento di grappoli di processi pesanti), ma continuo a non funzionare normalmente quando lo schermo è spento (anche se ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
è instabile)
Quando avvio la musica A come di consueto e la musica B usando mplayer per / dev / msm_pcm_out (facendole mescolare) la musica A taglia più del solito e di solito sento B quando A è in chop. Quando spengo lo schermo, sia A che B tagliano in sincronia (l'arresto di B porta a una riproduzione relativamente più fluida di A in questo modo).
Come riprodurre musica su Android in modo affidabile in presenza di un carico in background? Devo segnalare un bug da qualche parte?
Aggiornamento Trovato un modo per riprodurre musica. Sconveniente, ma senza tagliare :
- Avviare WakeLock in modalità "CPU on, Screen Off, Keyboard off"
- Usa mplayer per riprodurre musica bypassando 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)
Gioca senza tagliare, non importa quante applicazioni avvii, cosa fare con Wifi, orientamento e modalità aereo. Anche con "powersave" governatore cpufreq (tutto molto lento, ma la musica suona bene). Quindi l'hardware ha abbastanza risorse per riprodurlo.
Aggiornamento 2 Sembra fare
for i in `pgrep ''`; do schedtool -D $i; done
vale a dire "Imposta la priorità inattiva per tutti i processi" rende la musica riproducibile anche quando {avvio programmi, blocco schermo, giro schermo; si riconnette ad altre stazioni di rete mobile} a scapito di un ritardo di input nei giochi. Non so esattamente perché succede.