una telefonica samsung salientes para oculto llamadas llamada grabar grabacion entrantes conversación conseguir como celular app aplicaciones aplicacion android android-source alsa android-kernel android-rom

telefonica - Modificación de reproducción de voz en llamada en ROM personalizada de Android



como grabar una llamada sin aplicaciones (1)

Me gustaría modificar el sistema operativo Android (imagen oficial de AOSP) para agregar preprocesamiento a un sonido normal de reproducción de llamadas telefónicas.

Ya he logrado este filtrado para la reproducción de audio de la aplicación (modificando HAL y audioflinger ).

Estoy de acuerdo con apuntar solo a un dispositivo específico (Nexus 5X). Además, solo necesito filtrar la reproducción; no me importa la grabación (enlace ascendente).

ACTUALIZACIÓN # 1:

Para que quede claro: estoy de acuerdo con modificar los controladores específicos de Qualcomm, o cualquier parte que se ejecute en Nexus 5X y pueda ayudarme a modificar la reproducción de llamadas entrantes.

ACTUALIZACIÓN # 2:

Estoy intentando crear una aplicación de capa Java que enrute la reproducción del teléfono a la transmisión de música en tiempo real.

Ya he logrado instalarlo como una aplicación del sistema, obteniendo permisos para inicializar AudioRecord con AudioRecord . Sin embargo, la grabación da muestras en blanco; No graba la llamada de voz.

Este es el código dentro de mi hilo de trabajo:

// Start recording int recBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT); mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_DOWNLINK, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, recBufferSize); // Start playback int playBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT); mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, playBufferSize, AudioTrack.MODE_STREAM); mRecord.startRecording();; mTrack.play(); int bufSize = 1024; short[] buffer = new short[bufSize]; int res; while (!interrupted()) { // Pull recording buffers and play back res = mRecord.read(buffer, 0, bufSize, AudioRecord.READ_NON_BLOCKING); mTrack.write(buffer, 0, res, AudioTrack.WRITE_BLOCKING); } // Stop recording mRecord.stop(); mRecord.release(); mRecord = null; // Stop playback mTrack.stop(); mTrack.release();; mTrack = null;

Estoy corriendo en un Nexus 5X, mi propia ROM personalizada AOSP, Android 7.1.1. Necesito encontrar el lugar que permita que funcione la grabación de llamadas, probablemente en algún lugar en hardware/qcom/audio/hal en el código de la plataforma.

También he estado mirando la función voice_check_and_set_incall_rec_usecase en hardware/qcom/audio/hal/voice.c Sin embargo, no pude darle sentido (cómo hacer que funcione de la manera que quiero).

ACTUALIZACIÓN # 3:

Abrí una pregunta más específica sobre el uso de AudioSource.VOICE_DOWNLINK , que podría atraer la atención correcta y eventualmente también me ayudará a resolver el problema de esta pregunta.


Hay varios problemas posibles que me vienen a la mente. El búfer en blanco puede indicar que tiene seleccionada la fuente incorrecta. Además, dado que de acuerdo con https://developer.android.com/reference/android/media/AudioRecord.html#AudioRecord(int,%20int,%20int,%20int,%20int) es posible que no siempre obtenga una excepción, incluso si algo mal con la configuración, es posible que desee confirmar si su objeto se ha inicializado correctamente. Si todo lo demás falla, también puede hacer un "mRecord.setPreferredDevice (AudioDeviceInfo.TYPE_BUILTIN_EARPIECE);" para enrutar el auricular incorporado del teléfono directamente a la entrada de su grabadora. Sí, está un poco sucio y hacky, pero tal vez se adapte al propósito.

La otra cosa que me desconcertó fue que, en lugar de usar la clase de generador, ha intentado configurar el objeto directamente a través de su constructor. ¿Hay alguna razón específica por la que no desea utilizar AudioRecord.Builder (incluso hay un buen ejemplo en https://developer.android.com/reference/android/media/AudioRecord.Builder.html )?