AndroidL 音频文件编译过程

来源:互联网 发布:洛阳师范网络 编辑:程序博客网 时间:2024/06/06 01:00

此文主要记录sounds下各种音频文件的编译过程

1.frameworks/base/data/sounds下音频文件的编译

ALARM_FILES【frameworks/base/data/sounds/alarms/material/ogg/】
NOTIFICATION_FILES【frameworks/base/data/sounds/notifications/material/ogg/】
RINGTONE_FILES【frameworks/base/data/sounds/ringtones/material/ogg/】
EFFECT_FILES【frameworks/base/data/sounds/effects/ogg/】
MATERIAL_EFFECT_FILES【frameworks/base/data/sounds/effects/material/ogg/】
frameworks/base/data/sounds/AllAudio.mk文件中列出了所有要编译的声音文件,可以用generate-all-audio.sh工具来生成

........

#将Alarm_Beep_01.ogg文件拷贝到system/media/audio/alarms/Alarm_Beep_01.ogg

PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/Alarm_Beep_01.ogg:system/media/audio/alarms/Alarm_Beep_01.ogg \ 
........

2.通过当前目录下的mk文件来生成AllAudio.mk文件(工具中有个问题,当多个mk文件中定义了某个目标文件时会选择其中的一个,具体是哪个有待确认)
/frameworks/base/data/sounds/generate-all-audio.sh
........
cat > AllAudio.mk << EOF                             #从这里开始(EOF)的内容都写入到新建的AllAudio.mk文件中
........
LOCAL_PATH := frameworks/base/data/sounds

PRODUCT_COPY_FILES += \\
EOF                                                             #到这里结束

cat OriginalAudio.mk AudioPackage*.mk |    #列出OriginalAudio.mk与AudioPackage*.mk文件中的内容
 grep \\\$\(LOCAL_PATH\).*: |                       #在这些内容中过滤出所有包含$(LOCAL_PATH)的内容
 cut -d : -f 2 |                                                 #剪切所有内容中带分隔符:的第2个field前面的内容
 cut -d \  -f 1 |                                                #剪切所有内容中带分隔符\的第1个field前面的内容
 sort -u |                                                        #删除重复的内容
 while read DEST                             
 do
   echo -n \ \ \ \  >> AllAudio.mk                     #-n换行且光标移至首行,并输入四个空格
   cat *.mk |
     grep \\\$\(LOCAL_PATH\).*:$DEST |
     tr -d \ \\t |                                                   #删除空格与\t符号
     cut -d : -f 1 |                                              #剪切所有内容中带分隔符:的第1个field前面的内容
     sort -u |                                                     #删除重复的内容
     tail -n 1 |                                                   #从最后一行开始读取指定文件
     tr -d \\n >> AllAudio.mk                             #删除换行符
   echo :$DEST\ \\ >> AllAudio.mk                  #输入:与$DEST中内容以及在后面输入一个空格与\
 done
echo >> AllAudio.mk


3.AllAudio.mk编译调用过程
在./build/target/product/full_base.mk中
........
# Get some sounds
$(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)#编译AllAudio.mk文件
........


在/build/target/product/aosp_base.mk中
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)#只有一句,编译full_base.mk


在./build/target/product/full_base_telephony.mk中
........
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk)#编译aosp_base.mk
$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)


在/build/target/product/aosp_base_telephony.mk中
$(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk) #只有一句,编译full_base_telephony.mk


在/build/target/product/full_x86_64.mk中
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) #编译aosp_base_telephony.mk
........


4.google源码中音频文件的重复部分
google源码编译后,在系统铃声中会有一些重复的铃声,其中Argon,Helium,Krypton,Neon,Oxygen都有重复的文件,这里需要将这些删除

在frameworks/base/data/sounds/AllAudio.mk 中将Argon,Helium,Krypton,Neon,Oxygen几行删除(注释掉这几行会编译报错,需要删除)


0 0
原创粉丝点击