Comment faire en sorte qu'Android joue de la musique de manière fiable, sans couper?


10

Lorsque j'essaie de lire de la musique sur Android 2.3 (en utilisant divers lecteurs, y compris PowerAmp) sur Sony Ericsson Xperia X10, je n'obtiens pas un son fiable. La musique s'interrompt brièvement, par exemple lorsque:

  • J'appuie sur le bouton d'alimentation (surtout à plusieurs reprises) ( request_suspend_state: sleep;request_suspend_state: wakeupen dmesg)
  • Quand je vois des messages comme send sigkill to 15497 (ndroid.settings), adj 8, size 6428dans dmesg
  • Lorsqu'un programme réagit à une orientation d'écran modifiée.
  • Lorsque la connexion wifi est établie, lorsque je la force à "se réassocier"
  • Lorsque je vais vers / depuis l'application depuis l'écran d'accueil (AWDLauncher), sauf vers / depuis l'écran WidgetLocker.
  • Lorsque j'active / désactive le mode avion.
  • Lorsque l'écran est éteint (le plus ennuyeux)

Lorsque la seule façon vraiment stable de jouer 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. Le démarrage de porcs CPU comme while true; do true; donen'affecte pas le hachage.

Et ça jouait plus ou moins bien sur Android 2.1.

Le processus "mediaserv" (qui écrit dans / dev / msm_pcm_out) a une priorité io et de planification en temps réel, mais le son est de toute façon saccadé. Si je commence à jouer à partir de la console avec mplayer -ao pcm:file=/dev/msm_pcm_outle son moins côtelé (notamment il n'est pas interrompu par le bouton d'alimentation / le chargement de lots de processus lourds), mais je ne me comporte toujours pas normalement lorsque l'écran est éteint (même ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_outsaccadé)

Lorsque je démarre la musique A de la manière habituelle et la musique B en utilisant mplayer vers / dev / msm_pcm_out (en les mélangeant), la musique A coupe plus que d'habitude et j'entends habituellement B quand A est en hache. Lorsque j'éteins l'écran, les tronçons A et B sont synchronisés (l'arrêt de B entraîne une lecture relativement plus fluide de A de cette façon).

Comment jouer de la musique sur Android de manière fiable en présence d'une charge d'arrière-plan? Dois-je signaler un bug quelque part?

Mise à jour J'ai trouvé un moyen de jouer de la musique. Inconvénient, mais sans couper :

  1. Démarrez WakeLock en mode "CPU allumé, écran éteint, clavier éteint"
  2. Utilisez mplayer pour jouer 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 couper, peu importe le nombre d'applications que je démarre, que faire avec le Wifi, l'orientation et les modes avion. Même avec le gouverneur cpufreq "powersave" (tout est très lent, mais la musique joue bien). Le matériel a donc suffisamment de ressources pour y jouer.

Update 2 On dirait que faire

for i in `pgrep ''`; do schedtool -D $i; done

c'est-à-dire que "Définir la priorité au ralenti pour tous les processus" permet à la musique de jouer correctement même lorsque je {démarre des programmes, verrouille l'écran, fais pivoter l'écran; elle se reconnecte à d'autres stations du réseau mobile} au détriment d'un certain décalage d'entrée dans les jeux. Je ne sais pas exactement pourquoi cela se produit.


De quel appareil disposez-vous? On dirait que c'est très limité en ressources. Peut-être qu'une ROM personnalisée rapide et légère améliorerait les performances.
Débit

Sony Ericsson Xperia X10. Que signifie «ressources limitées»? Il devrait donner la priorité aux médias par rapport aux activités habituelles, permettant une lecture fluide indépendamment de la charge de fond présente. Essayer également de provoquer une charge en utilisant explicitement des applications lourdes monopolisant le processeur et la mémoire ne conduit pas à un son saccadé, alors que la simple réassociation du Wifi produit toujours du hachage. De plus, cela a joué plus ou moins bien sur Android 2.1
Vi0

La musique joue le même, même si je force le gouverneur cpufreq powersave (et la charge non agréable du processeur est d'environ 20% dans ce cas). Quelles ressources peuvent être courtes?
Vi0

D'après ce que je peux lire de vos commentaires supplémentaires: aucun. Et je n'ai jamais entendu dire non plus que le X10 avait un problème général avec la lecture audio.
Débit

Y compris après la mise à jour vers Android 2.3?
Vi0

Réponses:


0

Essayez de désactiver les applications ou le matériel qui utilisent une grande partie des ressources du téléphone. Désactivez le GPS, le WIFI, le service réseau et atténuez le rétroéclairage. Fermez également toute autre application en cours d'exécution que celles dont vous avez besoin pour lire de la musique. Si cela ne fonctionne toujours pas, votre appareil n'a peut-être pas assez de mémoire.


Ressemble à un conseil général, pas à une solution / solution de contournement du bogue. J'ai essayé différents modes (décrits en question). OOM killer n'est qu'une des choses qui déclenchent le bogue.
Vi0

0

Augmentez votre Audio Buffertaille.

J'utilise PlayerPro Music Player avec son pack DSP. Le pack DSP me permet d'ajuster la taille du tampon audio. Je n'ai jamais eu besoin d'utiliser cette fonctionnalité, mais cela vous aidera.

Vous pouvez également trouver d'autres lecteurs de musique pour prendre en charge cette fonctionnalité. La clé est Audio Buffer.

Alternativement, vous pouvez réduire la qualité de la musique ainsi que la charge du système.


Au moins, définir la taille maximale du tampon dans Mixzing Player n'aide pas.
Vi0

1
"réduire la qualité de la musique ainsi que la charge du système" -> solution de contournement, pas de correction. J'ai déjà des solutions de contournement hacky (voir "Mises à jour")
Vi0
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.