prueba de la función de bucle de retorno MTK

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,
Aquí Insertar imagen Descripción
Aquí Insertar imagen Descripción
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;

Aquí Insertar imagen Descripción
Abrir el nombre del dispositivo es: ULDL_Loopback , el siguiente cat /proc/asound/pcmcomando para ver la información del dispositivo: un dispositivo en dev4 card0
Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción
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

Publicados 168 artículos originales · ganado elogios 39 · vistas 110 000 +

Supongo que te gusta

Origin blog.csdn.net/u010481276/article/details/104995476
Recomendado
Clasificación