El bucle de retorno mic2 a SPK
El cable de vídeo y el cable de audio a la línea correspondiente a la computadora del vehículo, reproductor de CD para reproducir música, no encontraron ningún sonido, compruebe primero el hardware,
cantidad a cuando se juega con la forma de onda
nota: para sintonizar con el modo de osciloscopio del módulo de comunicación puede ver modelos
Compruebe MTK en línea, ver la mayor parte de la interfaz, y que más tarde escribió apk, encontró ninguna autoridad, ningún efecto, escrita en su propia sospecha que se requiere privilegios de sistema apk
por lo que voy a entrar en el apk del sistema, ajustar algunos parámetros, que se encuentra tener el efecto de
las interfaces son:
abierto
soplo
sAudioManager.setParameters("SET_LOOPBACK_TYPE=3,3");
Se puede oír el sonido de
sAudioManager.setParameters("SET_LOOPBACK_TYPE=25,3");
De hecho, esto no hay mucha diferencia entre los dos
cerca
sAudioManager.setParameters("SET_LOOPBACK_TYPE=0");
cumplimiento:
status_t AudioMTKHardware::setCommonParameters(const String8 &keyValuePairs) {
// Loopback
if (param.get(keySET_LOOPBACK_TYPE, value_str) == NO_ERROR) {
param.remove(keySET_LOOPBACK_TYPE);
// parse format like "SET_LOOPBACK_TYPE=1" / "SET_LOOPBACK_TYPE=1+0"
int type_value = NO_LOOPBACK;
int device_value = -1;
sscanf(value_str.string(), "%d,%d", &type_value, &device_value);
ALOGV("type_value = %d, device_value = %d", type_value, device_value);
const loopback_t loopback_type = (loopback_t)type_value;
loopback_output_device_t loopback_output_device;
if (loopback_type == NO_LOOPBACK) { // close loopback
LoopbackManager::GetInstance()->SetLoopbackOff();
} else { // open loopback
if (device_value == LOOPBACK_OUTPUT_RECEIVER ||
device_value == LOOPBACK_OUTPUT_EARPHONE ||
device_value == LOOPBACK_OUTPUT_SPEAKER) { // assign output device
loopback_output_device = (loopback_output_device_t)device_value;
} else { // not assign output device
if (AudioSystem::getDeviceConnectionState(AUDIO_DEVICE_OUT_WIRED_HEADSET, "") == AUDIO_POLICY_DEVICE_STATE_AVAILABLE ||
AudioSystem::getDeviceConnectionState(AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "") == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
loopback_output_device = LOOPBACK_OUTPUT_EARPHONE;
} else if (bForceUseLoudSpeakerInsteadOfReceiver == true) {
loopback_output_device = LOOPBACK_OUTPUT_SPEAKER;
} else {
loopback_output_device = LOOPBACK_OUTPUT_RECEIVER;
}
}
LoopbackManager::GetInstance()->SetLoopbackOn(loopback_type, loopback_output_device);
}
break;
}
Puede ser consciente de: SET_LOOPBACK_TYPE = 25,3
Por debajo de 25 correspondiente al bucle de retorno dispositivo fuente MD_REF_MIC_ACOUSTIC_LOOPBACK o AP_REF_MIC_AFE_LOOPBACK
nuestra mic2 correspondiente a esta banda es ref del micrófono
// for loopback
enum loopback_t {
NO_LOOPBACK = 0,
// AFE Loopback
AP_MAIN_MIC_AFE_LOOPBACK = 1,
AP_HEADSET_MIC_AFE_LOOPBACK = 2,
AP_REF_MIC_AFE_LOOPBACK = 3,
AP_3RD_MIC_AFE_LOOPBACK = 4,
// Acoustic Loopback
MD_MAIN_MIC_ACOUSTIC_LOOPBACK = 21,
MD_HEADSET_MIC_ACOUSTIC_LOOPBACK = 22,
MD_DUAL_MIC_ACOUSTIC_LOOPBACK_WITHOUT_DMNR = 23,
MD_DUAL_MIC_ACOUSTIC_LOOPBACK_WITH_DMNR = 24,
MD_REF_MIC_ACOUSTIC_LOOPBACK = 25,
MD_3RD_MIC_ACOUSTIC_LOOPBACK = 26,
// BT Loopback with codec
AP_BT_LOOPBACK = 30,
MD_BT_LOOPBACK = 31,
// BT Loopback without codec
AP_BT_LOOPBACK_NO_CODEC = 32,
MD_BT_LOOPBACK_NO_CODEC = 33,
};
Objetivo dispositivo de salida SET_LOOPBACK_TYPE = 25,3 3 después de la coma que queremos SPK salida, LOOPBACK_OUTPUT_SPEAKER
enum loopback_output_device_t {
LOOPBACK_OUTPUT_RECEIVER = 1,
LOOPBACK_OUTPUT_EARPHONE = 2,
LOOPBACK_OUTPUT_SPEAKER = 3,
};
Hay una detrás de sonido
En el que el dispositivo de interfaz habilitado
AudioALSALoopbackController::getInstance()->open(output_device, input_device);
El método es como sigue: el dispositivo se encuentra configuración abierta
mConfig.channels = 2;
mConfig.rate = 48000;
mConfig.period_size = 1024;
mConfig.period_count = 2;
mConfig.format = PCM_FORMAT_S16_LE;
mConfig.start_threshold = 0;
mConfig.stop_threshold = 0;
mConfig.silence_threshold = 0;
Abrir el nombre del dispositivo es: ULDL_Loopback , el siguiente cat /proc/asound/pcm
comando para ver la información del dispositivo: un dispositivo en dev4 card0
Es en snd_soc_dai_link de la siguiente manera:
\kernel-3.18\sound\soc\mediatek\mt6580\mt_soc_machine.c
{
.name = "ULDLOOPBACK",
.stream_name = MT_SOC_ULDLLOOPBACK_STREAM_NAME,
.cpu_dai_name = MT_SOC_ULDLLOOPBACK_NAME,
.platform_name = MT_SOC_ULDLLOOPBACK_PCM,
.codec_dai_name = MT_SOC_CODEC_ULDLLOOPBACK_NAME,
.codec_name = MT_SOC_CODEC_NAME,
.init = mt_soc_audio_init,
.ops = &mt_machine_audio_ops,
},
Después de hardware de entrada de micrófono y salida de forma de onda resueltos, SET_LOOPBACK_TYPE = 25,3 con este problema tendrá sonido intermitente
en MTK búsqueda en línea encontró el problema: las consecuencias del ruido generado
por lo que cambian los parámetros "SET_LOOPBACK_TYPE = 3,3 vistazo y encontró que este fenómeno no está soplando modo, se
Una vez más ir a la prueba de hardware
Después del descubrimiento no se reproduce, el ruido de fondo es demasiado grande, la depuración de un aumento de poco mic2: encontrado poco mejor, ruido de fondo, el sonido es claro
tinymix Audio_PGA2_Setting 0
ch007_27:/ # tinymix Audio_PGA2_Setting
Audio_PGA2_Setting: >-6Db 0Db 6Db 12Db 18Db 24Db
Pa método de ajuste de ganancia de
la reproducción de música local, la posición de los ficheros de la plataforma 2, determine la magnitud de la pa bueno,
Foro de bucle de retorno, entonces el software mic2 de la máquina dv datos jugar pa, pa será transferida a la potencia de salida especificada, aumento pa ajuste para reproducir música con la misma magnitud de una anterior, un aumento en el volumen del brazo para ver si hay distorsión, bien en esta escena en virtud de la ganancia
finalmente transferido a -5 dB, el sonido es demasiado grande plataforma