在Android自定义ROM中修改通话中的语音播放

我想修改Android操作系统(AOSP官方图片),将预处理添加到正常的电话播放声音。

我已经实现了应用程序audio播放的过滤(通过修改HAL和audioflinger)。

只要定位到特定设备(Nexus 5X),我就行了。 另外,我只需要过滤回放 – 我不关心logging(上行链路)。

更新:要清楚 – 我可以修改Qualcomm特定的驱动程序,或Nexus 5X上运行的任何部分都可以帮助我修改通话播放。

更新#2:

我正在尝试创build一个Java层应用程序,实时将手机播放路由到音乐stream。 我已经成功地将其安装为系统应用程序,获取AudioRecord初始化AudioRecord权限。 但是,录音会给出空白样本,不会录制语音通话。

我的工作线程内的代码:

 // 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; 

我正在运行Nexus 5X,我自己的AOSP自定义ROM,Android 7.1.1。 我需要find允许通话logging工作的地方 – 可能是硬件/平台代码中的qcom / audio / hal。

另外我一直在看:在hardware / qcom / audio / hal / voice.c中的函数voice_check_and_set_incall_rec_usecase但是无法理解它或者如何使它工作。

更新#3:我已经打开了一个关于使用AudioSource.VOICE_DOWNLINK更具体的问题,这可能会吸引合适的关注,并最终帮助我解决这个问题。 通话logging – 使其在N​​exus 5X上工作(可以使用生根或自定义ROM)