当我尝试在索尼爱立信Xperia X10上的Android 2.3上(使用包括PowerAmp在内的各种播放器)播放音乐时,声音不可靠。音乐会暂停一小段时间,例如,在以下情况下:
- 我按下电源按钮(尤其是反复按)(
request_suspend_state: sleep;request_suspend_state: wakeup
以dmesg键) - 当我看到类似
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
dmesg的消息时 - 当某些程序对更改的屏幕方向做出反应时。
- 建立wifi连接后,当我强制其“重新关联”时
- 当我从主屏幕(AWDLauncher)进入/从应用程序进入时,除了WidgetLocker屏幕/从中进入。
- 当我启用/禁用飞行模式时。
- 显示屏关闭时(最烦人)
当播放音乐的唯一真正稳定的方法是使用StayAwake强制显示时,请关闭Wi-Fi,打开飞行模式并不要切换应用程序。像while true; do true; done
这样启动CPU猪不会影响斩波。
而且它在Android 2.1上的运行情况差不多。
“ mediaserv”进程(写入/ dev / msm_pcm_out)具有实时io和调度优先级,但是声音仍然不稳定。如果我从控制台开始播放时mplayer -ao pcm:file=/dev/msm_pcm_out
声音不那么刺耳(值得注意的是,它不会因电源按钮/加载大量繁重的进程而中断),但在屏幕关闭时仍然表现不正常(即使ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
是起伏不定)
当我以通常的方式启动音乐A并使用mplayer将音乐播放器B启动到/ dev / msm_pcm_out(将它们混合)时,音乐A会比平时更响声,并且当A处于响声时我通常会听到B声。当我关闭屏幕时,A和B会同时斩波(停止B会以这种方式相对流畅地播放A)。
在存在背景负载的情况下如何在Android上可靠地播放音乐?我应该在某处报告错误吗?
更新找到了一种播放音乐的方法。不方便,但不切碎:
- 在“ CPU开启,屏幕关闭,键盘关闭”模式下启动WakeLock
- 使用mplayer绕过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)
无论我启动了多少应用程序,Wifi,方向和飞行模式如何,都可以玩而不会斩波。即使使用“省电” cpufreq调速器(一切都非常慢,但是音乐可以播放)。因此,硬件具有足够的资源来播放它。
更新2 看起来像在做
for i in `pgrep ''`; do schedtool -D $i; done
即,“为所有进程设置空闲优先级”即使我{启动程序,锁定屏幕,旋转屏幕;它重新连接到其他移动网络站点},也可以播放音乐,但是会浪费一些游戏输入延迟。不知道为什么会这样。