向Java提供native_write_byte和native_write_short接口〃它们一般是通过调用AudioTrack的write()函数来完成的〃只是在Java的数据类型和C++的指针中做了一步转换。
1.3.5 Audio系统的Java代码
Android的Audio系统的相关类在android.media包中〃Java部分的代码路径为: frameworks/base/media/java/android/media
Audio系统主要实现了以下几个类:android.media.AudioSystem、android.media. AudioTrack、android.media.AudioRecorder、android.media.AudioFormat。前面的3个类和本地代码是对应的〃AudioFormat提供了一些Audio相关类型的枚举值。
注意:在Audio系统的Java代码中〃虽然可以通过AudioTrack和AudioRecorder的write()和read()接口〃在 Java层对Audio的数据流进行操作。但是〃更多的时候并不需要这样做〃而是在本地代码中直接调用接口进行数据流的输入/输出〃而Java层只进行控制类操作〃不处理数据流。
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 11 of 33
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 12 of 33
2.0 音效设置及控制
2.1 不同类型声音资源的设置
(1)TCL项目的默认音频文件资源在
gin_wimdata_ng/wcustores/Audios/frameworks/base/data/sounds/下面〃其中有Alarm、Notification、Ringtones、Switch_On_Off、UI这几个文件夹〃分别存放不同类型的音频文件资源
(2)位置:frameworks/base/media/java/android/media/AudioService.java
/* Sound effect file names */
private static final String SOUND_EFFECTS_PATH = \; private static final String[] SOUND_EFFECT_FILES = new String[] { //PR-240541-Jingyang-Wang begin //\ \,
//PR-240541-Jingyang-Wang end \, \, \, \,
\//CR231720-Xiaodan-Fan-001 };
/* Sound effect file name mapping sound effect id (AudioManager.FX_xxx) to * file index in SOUND_EFFECT_FILES[] (first column) and indicating if effect * uses soundpool (second column) */ private int[][] SOUND_EFFECT_FILES_MAP = new int[][] { {0, -1}, // FX_KEY_CLICK
{0, -1}, // FX_FOCUS_NAVIGATION_UP
{0, -1}, // FX_FOCUS_NAVIGATION_DOWNa/audio/ui/ 目录下。 {0, -1}, // FX_FOCUS_NAVIGATION_LEFT {0, -1}, // FX_FOCUS_NAVIGATION_RIGHT {1, -1}, // FX_KEYPRESS_STANDARD {2, -1}, // FX_KEYPRESS_SPACEBAR {3, -1}, // FX_FOCUS_DELETE {4, -1} // FX_FOCUS_RETURN };
/**
* Loads samples into the soundpool. * This method must be called at when sound effects are enabled */
public boolean loadSoundEffects(){
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 13 of 33
…
String filePath = Environment.getRootDirectory() + SOUND_EFFECTS_PATH + SOUND_EFFECT_FILES[SOUND_EFFECT_FILES_MAP[effect][0]];
…
return true;
}
private void playSoundEffect(int effectType, int volume) {
…
}
音效文件放在:/system/media/audio/ui/ 目录下。
2.2 拍照/录音时候的声音文件
位置:frameworks/base/services/camera/libcameraservices/CameraService.cpp下
void CameraService::loadSound() {
Mutex::Autolock lock(mSoundLock);
LOG1(\
if (mSoundRef++) return;
char value[PROPERTY_VALUE_MAX];
property_get(\
int disableSound = atoi(value); // [camera], daming.zou@jrdcom.com, Sep 13, 2011, // FR158416, add SDMID Def_shuttersound_enable
char soundPlayValue[PROPERTY_VALUE_MAX];
property_get(\
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 14 of 33
if(!disableSound && !strncmp(soundPlayValue, \
mSoundPlayer[SOUND_SHUTTER] = newMediaPlayer(\
mSoundPlayer[SOUND_RECORDING] = newMediaPlayer(\
}
// create listener object
mSoundListener = new ShutterSoundListener();
if(mSoundPlayer[SOUND_SHUTTER].get() && mSoundListener.get())
{
mSoundPlayer[SOUND_SHUTTER]->setListener(mSoundListener); //setlistener
} }
2.3 默认铃声的设置
文件:frameworks/base/media/java/android/media/AudioService.java
TCL项目中默认的设置位于
?
gin_wimdata_ng/wprocedures/plf〃具体到Setting〃就是isdm_Settings.plf和isdm_SettingsProvider.plf这两个文件
例如isdm_Settings.plf中以下定义定义了iIncoming call默认铃声
ArcherMind Inc. Proprietary – For Internal Use Only
CONFIDENTIAL Date
Page 15 of 33