When I try to play music on Android 2.3 (using various players, including PowerAmp) on Sony Ericsson Xperia X10 I get not reliable sound. Music pauses for a short time, for example, when:
- I press the power button (especially repeatedly) (
request_suspend_state: sleep;request_suspend_state: wakeup
in dmesg) - When I see messages like
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
in dmesg - When some program reacts to changed screen orientation.
- When wifi connection gets established, when I force it to "reassociate"
- When I go to/from application from home screen (AWDLauncher), except of to/from WidgetLocker screen.
- When I enable/disable Airplane Mode.
- When the display is off (the most annoying)
When only really stable way to play music is to use StayAwake to force display on, turn off Wi-Fi, turn on Airplane Mode and don't switch applications. Starting CPU hogs like while true; do true; done
does not affect chopping.
And it was playing more or less fine on Android 2.1.
"mediaserv" process (that writes to /dev/msm_pcm_out) has realtime io and scheduling priority, but sound is choppy anyway. If I start playing from console with mplayer -ao pcm:file=/dev/msm_pcm_out
the sound chop less (notably it does not get interrupted by power button / loading bunches of heavy processes), but still behave not normally when screen is off (even ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
is choppy)
When I start music A by usual way and music B using mplayer to /dev/msm_pcm_out (getting them mixed) music A chops more than usual and I usually hear B when A is in chop. When I turn off screen, both A and B chops in sync (stopping B leads to relatively more fluent playback of A this way).
How to play music on Android reliably in presence of background load? Should I report a bug somewhere?
Update Found a way of playing music. Inconvenient, but without chopping:
- Start WakeLock in "CPU on, Screen Off, Keyboard off" mode
- Use mplayer to play music bypassing 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)
Plays without chopping no matter how much applications I start, what do with Wifi, orientation and airplane modes. Even with "powersave" cpufreq governor (everything very slow, but music plays fine). So the hardware have enough resources to play it.
Update 2 Looks like doing
for i in `pgrep ''`; do schedtool -D $i; done
i.e. "Set Idle priority for all processes" makes music play fine even when I {start programs,lock screen,rotate screen;it reconnects to other mobile network stations} at expense of some input lag in games. Don't know exactly why it happens.