天天看點

[RK3288][Android6.0] 開機播放音樂流程小結

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檔案播放時間可以根據開機動畫來決定.