Я хотел бы изменить ОС Android (официальное изображение с AOSP), чтобы добавить предварительную обработку к нормальному звуку воспроизведения телефонного звонка.Изменение голосового воспроизведения в режиме реального времени в пользовательском ПЗУ Android
Я уже достиг этой фильтрации для приложений воспроизведения звука (путем изменения HAL и audioflinger).
Я в порядке с таргетингом только на конкретное устройство (Nexus 5X). Кроме того, мне нужно только фильтровать воспроизведение - мне не нужна запись (восходящая линия).
UPDATE # 1:
Для того, чтобы понять - я в порядке с модифицирующими Qualcomm-специальные драйверы, или любой другой части, что это то, что работает на Nexus 5X и может помочь мне изменить в вызову воспроизведения ,
UPDATE # 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
Однако я не смог понять это (как заставить его работать так, как я этого хочу).
UPDATE # 3:
Я открыл a more-specific question об использовании AudioSource.VOICE_DOWNLINK
, которые могли бы привлечь внимание правильное и в конечном итоге поможет мне решить проблему на этот вопрос, а также.
Я хотел сделать это. Просто чтобы он отслеживал вызов ключевых слов, затем вставляйте звук в звонок. Как я говорю «гольф», а затем в звонок звучит звук хлопания в гольф. – danny117
Я сомневаюсь, что изменение стандартного ввода-вывода возможно без игры с ndk-jni – user2450263
Я говорю о создании пользовательского ПЗУ, а не обычного приложения. – SirKnigget