Platform: ROCKCHIP
OS: Android 6.0
Kernel: 3.10.92
main -> bootanimation_main.cpp
new BootAnimation -> Bootanimation.cpp
BootAnimation::threadLoop ->
BootAnimation::playMusic ->
property_set("ctl.start", "startup_rington"); -> //音頻檔案存在才會調用.
音頻檔案路徑:
/system/media/audio/startup.wav
init程序去啟startup_rington service, service的定義如下
rk3288/device/rockchip/common/init.rk30board.rc
//預設禁止,參數表示音頻檔案隔多久之後開始播放,見後面腳本檔案.
service startup_rington /system/bin/tinyplaywav /system/media/audio/startup.wav 3
class core
user system
group graphics audio system
disabled
oneshot
編譯生成:
rk3288/device/rockchip/common/device.mk
PRODUCT_COPY_FILES += \
device/rockchip/common/tinyplaywav:system/bin/tinyplaywav
tinyplaywav其實是個腳本
rk3288/device/rockchip/common/tinyplaywav
[[email protected]:~/rk3288/device/rockchip/common]$ cat tinyplaywav
#!/system/bin/sh
#LOG_FILE=/data/tinyplaywave.log
# check input
if [ $# -lt 1 ] ; then
#echo "[tinyplaywav] not wav file to play!!" >> $LOG_FILE
exit 1
fi
//wav檔案:/system/media/audio/startup.wav
# set parameter
WAV_FILE=$1
//休眠3秒後播放
if [ $# -eq 2 ] ; then
# sleep some time
#echo "[tinyplaywav] sleep $2 s" >> $LOG_FILE
sleep $2
fi
//最終調用的是tinyalsa工具
# play wav file
#echo "[tinyplaywav] start play, wav file is: $WAV_FILE" >> $LOG_FILE
//先切換到speaker
tinymix -D 0 "Playback Path" "SPK"
//然後播放
tinyplay $WAV_FILE -D 0 -d 0
wav檔案播放時間可以根據開機動畫來決定.