Коли я намагаюся відтворювати музику на Android 2.3 (використовуючи різні плеєри, включаючи PowerAmp) на Sony Ericsson Xperia X10, я отримую не надійний звук. Музика на короткий час робить паузу, наприклад, коли:
- Я натискаю кнопку живлення (особливо кілька разів) (
request_suspend_state: sleep;request_suspend_state: wakeup
у dmesg) - Коли я бачу повідомлення, як
send sigkill to 15497 (ndroid.settings), adj 8, size 6428
у dmesg - Коли якась програма реагує на зміну орієнтації екрана.
- Коли налагоджується з'єднання через Wi-Fi, я змушую його "зв'язатись"
- Коли я переходжу на / з програми з головного екрана (AWDLauncher), за винятком екрана WidgetLocker, до / з нього.
- Коли я вмикаю / вимикаю режим літака.
- Коли дисплей вимкнено (найбільш дратує)
Коли єдиний дійсно стабільний спосіб відтворення музики - це використання StayAwake для примусового відображення, вимкнення Wi-Fi, включення режиму літака та не перемикання програм. Запуск процесорів, як, наприклад while true; do true; done
, не впливає на рубання.
І вона грала більш-менш чудово на Android 2.1.
Процес "mediaserv" (який записує в / dev / msm_pcm_out) має пріоритет у режимі реального часу для іо і планування, але звук у будь-якому випадку є холодним. Якщо я почне грати з консолі із mplayer -ao pcm:file=/dev/msm_pcm_out
звуковим відбивачем менше (особливо це не переривається кнопкою живлення / завантаженням гроно важких процесів), але все одно ведуться не нормально, коли екран вимкнений (навіть ionice -c1 -p4 cat /dev/urandom > /dev/msm_pcm_out
увімкнено)
Коли я запускаю музику A звичайним способом і музику B, використовуючи програвач mplayer до / dev / msm_pcm_out (змішуючи їх) музику A відбиває більше, ніж зазвичай, і я зазвичай чую B, коли A знаходиться в рубанні. Коли я вимикаю екран, синхронізуються і A, і B (зупинка B призводить до відносно більш вільного відтворення A таким чином).
Як надійно відтворювати музику на Android при фоновому завантаженні? Чи потрібно десь повідомити про помилку?
Оновлення Знайдено спосіб відтворення музики. Незручно, але без рубання :
- Запустіть 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 "powerave" (все дуже повільно, але музика грає чудово). Тож у апаратного забезпечення достатньо ресурсів для його відтворення.
Оновлення 2 Схоже, що робити
for i in `pgrep ''`; do schedtool -D $i; done
тобто "Встановити пріоритет у режимі очікування для всіх процесів", музика відтворює чудово, навіть коли я {запуску програм, блокування екрана, повернення екрана; він знову підключається до інших станцій мобільної мережі} за рахунок деякого відставання введення в іграх. Не знаю точно, чому це відбувається.