일반 전화 통화 재생 사운드에 전처리를 추가하기 위해 Android OS (AOSP의 공식 이미지)를 수정하고 싶습니다.
나는 이미 앱 오디오 재생에 대해이 필터링을 달성했습니다 ( HAL 및 audioflinger 수정 ).
특정 기기 (Nexus 5X) 만 타겟팅해도 괜찮습니다. 또한 재생 만 필터링하면됩니다. 녹음 (업 링크)은 신경 쓰지 않습니다.
업데이트 # 1 :
명확히하기 위해 Qualcomm 전용 드라이버를 수정하거나 Nexus 5X에서 실행되고 통화 중 재생을 수정하는 데 도움이되는 부분을 수정해도 괜찮습니다.
업데이트 # 2 :
휴대폰 재생을 실시간으로 음악 스트림으로 라우팅하는 Java 레이어 앱을 만들려고합니다.
이미 시스템 앱으로 설치하는 데 성공 AudioRecord
하여 AudioSource.VOICE_DOWNLINK
. 그러나 녹음은 빈 샘플을 제공합니다. 음성 통화를 녹음하지 않습니다.
이것은 내 작업자 스레드 내부의 코드입니다.
// 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에서 실행 중입니다. 통화 녹음을 할 수있는 곳을 찾아야합니다. 아마도 hardware/qcom/audio/hal
플랫폼 코드의 어딘가에 있습니다.
또한에서 기능 voice_check_and_set_incall_rec_usecase
을 살펴 hardware/qcom/audio/hal/voice.c
보았지만 이해할 수 없었습니다 (원하는 방식으로 작동하도록 만드는 방법).
업데이트 # 3 :
사용 에 대한 보다 구체적인 질문을 열었습니다. 이 질문 은 AudioSource.VOICE_DOWNLINK
올바른주의를 끌 수 있으며 결국이 질문의 문제를 해결하는 데 도움이 될 것입니다.