今天基本调完了android 3G 通话功能,各种情况的下的audio path 切换,音量调整等一系列功能。但是音质还不是很好,模拟干扰比较多,有待改善。
先说一下电话 audio path 切换,总得来说切换分为两种情况:通话时path切换,铃声时path切换。
响铃时切换:
const AudioMixer *AudioHardware::getOutputRouteFromDevice(uint32_t device)
{
// LOGD("getOutputRouteFromDevice(%d)**********************************", device);
switch (device) {
case AudioSystem::DEVICE_OUT_EARPIECE:
return device_out_RCV;
case AudioSystem::DEVICE_OUT_SPEAKER:
if (mMode == AudioSystem::MODE_RINGTONE) return device_out_RING_SPK;
else return device_out_SPK;
case AudioSystem::DEVICE_OUT_WIRED_HEADPHONE:
if (mMode == AudioSystem::MODE_RINGTONE) return device_out_RING_NO_MIC;
else return device_out_HP_NO_MIC;
case AudioSystem::DEVICE_OUT_WIRED_HEADSET:
if (mMode == AudioSystem::MODE_RINGTONE) return device_out_RING_HP;
else return device_out_HP;
case (AudioSystem::DEVICE_OUT_SPEAKER|AudioSystem::DEVICE_OUT_WIRED_HEADPHONE):
case (AudioSystem::DEVICE_OUT_SPEAKER|AudioSystem::DEVICE_OUT_WIRED_HEADSET):
if (mMode == AudioSystem::MODE_RINGTONE) return device_out_RING_SPK_HP;
else return device_out_SPK_HP;
case AudioSystem::DEVICE_OUT_BLUETOOTH_SCO:
case AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_HEADSET:
case AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT:
return device_out_BT;
default:
return device_out_OFF;
}
}
该函数获取音频输出时的各各路径,当然包括电话来电响铃。其判断的已经就是device的不同,根据不同的device选择不同的path配置。
通话时的path切换也是类似的:
const AudioMixer *AudioHardware::getVoiceRouteFromDevice(uint32_t device)
{
// LOGD("getVoiceRouteFromDevice(%d)**********************************", device);
switch (device) {
case AudioSystem::DEVICE_OUT_EARPIECE:
return device_voice_RCV;
case AudioSystem::DEVICE_OUT_SPEAKER:
return device_voice_SPK;
case AudioSystem::DEVICE_OUT_WIRED_HEADPHONE:
case AudioSystem::DEVICE_OUT_WIRED_HEADSET:
switch (mTTYMode) {
case TTY_MODE_VCO:
return device_voice_TTY_VCO;
case TTY_MODE_HCO:
return device_voice_TTY_HCO;
case TTY_MODE_FULL:
return device_voice_TTY_FULL;
case TTY_MODE_OFF:
default:
if (device == AudioSystem::DEVICE_OUT_WIRED_HEADPHONE) {
return device_voice_HP_NO_MIC;
} else {
return device_voice_HP;
}
}
case AudioSystem::DEVICE_OUT_BLUETOOTH_SCO:
case AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_HEADSET:
case AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT:
return device_voice_BT;
default:
return device_voice_OFF;
}
}