Lorsque j'essaie de lire de la musique sous Android 2.3 (en utilisant divers lecteurs, dont PowerAmp) sur le Sony Ericsson Xperia X10, je n'obtiens pas un son fiable. La musique se met en pause pendant un court instant, par exemple, lorsque :
- J'appuie sur le bouton d'alimentation (surtout à plusieurs reprises) (
request_suspend_state: sleep;request_suspend_state: wakeup
dans dmesg) - Quand je vois des messages comme
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
dans dmesg - Quand un programme réagit à un changement d'orientation de l'écran.
- Lorsque la connexion wifi est établie, lorsque je la force à se "réassocier".
- Lorsque je vais vers/depuis une application depuis l'écran d'accueil (AWDLauncher), sauf vers/depuis l'écran WidgetLocker.
- Quand j'active/désactive le mode avion.
- Lorsque l'écran est éteint (le plus ennuyeux)
Lorsque la seule façon vraiment stable d'écouter de la musique est d'utiliser StayAwake pour forcer l'affichage, désactiver le Wi-Fi, activer le mode avion et ne pas changer d'application. Lancer des applications gourmandes en ressources CPU comme while true; do true; done
n'affecte pas le hachage.
Et ça marchait plus ou moins bien sous Android 2.1.
Le processus "mediaserv" (qui écrit sur /dev/msm_pcm_out) a la priorité d'entrée et de programmation en temps réel, mais le son est quand même haché. Si je commence à jouer depuis la console avec mplayer -ao pcm:file=/dev/msm_pcm_out
le son chop moins (notamment il n'est pas interrompu par le bouton d'alimentation / le chargement de tas de processus lourds), mais ne se comporte toujours pas normalement lorsque l'écran est éteint (même ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
est hachée)
Lorsque je lance la musique A de la manière habituelle et la musique B en utilisant mplayer sur /dev/msm_pcm_out (en les mélangeant), la musique A est plus hachée que d'habitude et j'entends généralement B lorsque A est hachée. Lorsque j'éteins l'écran, A et B sont synchronisés (arrêter B permet une lecture relativement plus fluide de A de cette façon).
Comment lire de la musique sur Android de manière fiable en présence d'une charge de fond ? Dois-je signaler un bug quelque part ?
Mise à jour J'ai trouvé un moyen de jouer de la musique. C'est gênant, mais sans hacher :
- Démarrer WakeLock en mode "CPU on, Screen Off, Keyboard off" (CPU activé, écran éteint, clavier éteint)
-
Utilisez mplayer pour lire de la musique en contournant 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)
Joue sans hachage quel que soit le nombre d'applications que je lance, ce que font les modes Wifi, orientation et avion. Même avec "powersave" cpufreq gouverneur (tout très lent, mais la musique joue bien). Donc le matériel a assez de ressources pour le jouer.
Mise à jour 2 On dirait qu'on fait
for i in `pgrep ''`; do schedtool -D $i; done
Par exemple, "Définir la priorité d'inactivité pour tous les processus" permet de lire de la musique sans problème même lorsque je {démarre des programmes, verrouille l'écran, fait pivoter l'écran ; il se reconnecte à d'autres stations de réseau mobile} au prix d'un certain décalage de saisie dans les jeux. Je ne sais pas exactement pourquoi cela se produit.