Sir*_*get 76 android alsa android-source android-kernel android-rom
我想修改Android OS(AOSP的官方图片),为正常的电话回放声音添加预处理功能.
我已经为app音频播放实现了这种过滤(通过修改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;
Run Code Online (Sandbox Code Playgroud)
我正在使用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,这可能引起正确的关注,并最终帮助我解决这个问题的问题.
小智 1
我想到了几个可能的问题。空白缓冲区可能表明您选择了错误的源。另外,因为根据https://developer.android.com/reference/android/media/AudioRecord.html#AudioRecord(int,%20int,%20int,%20int,%20int)你可能并不总是会得到异常,即使有些东西配置错误,您可能需要确认您的对象是否已正确初始化。如果所有其他方法都失败,您还可以执行“mRecord.setPreferredDevice(AudioDeviceInfo.TYPE_BUILTIN_EARPIECE);” 将手机的内置耳机直接连接到录音机的输入端。是的,它有点肮脏和老套,但也许适合目的。
另一件令我困惑的事情是,您没有尝试使用构建器类直接通过其构造函数来配置对象。您是否有特定原因不想使用 AudioRecord.Builder (https://developer.android.com/reference/android/media/AudioRecord.Builder.html甚至有一个很好的示例)?
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |