gpt4 book ai didi

安卓回音消除

转载 作者:太空狗 更新时间:2023-10-29 16:09:35 32 4
gpt4 key购买 nike

我正在尝试使用 AudioRecord 开发音频捕获应用程序来自android api的类,设置,音频源如何MediaRecorder.AudioSource.MIC,应用程序有效,但是当我尝试使用回声消除,设置一个MediaRecorder.AudioSource.VOICE_COMMUNICATION 如何来源,当 AudioRecorder 对象是创建后,会抛出 IllegalArgumentException,但我不知道为什么:

我的代码是:

private static final int SAMPLE_RATE = 16000;
private static final int BIT_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private static final int CHANNEL_CONFIGURATION = AudioFormat.CHANNEL_CONFIGURATION_MONO;

private int m_i32BufferSize;

private AudioRecord m_AudioRecorder;

public caudioCapture ()
{
super ();

m_i32BufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIGURATION, BIT_ENCODING);

//Create audio recorder object
try
{
m_AudioRecorder = new AudioRecord (MediaRecorder.AudioSource.VOICE_COMMUNICATION,SAMPLE_RATE,CHANNEL_CONFIGURATION,BIT_ENCODING,m_i32BufferSize);

}
catch (IllegalArgumentException e)
{
throw new IllegalArgumentException("Bad arguments on AudioRecorder creation", e);
}

在我的 android list 中我有:

使用权限 android:name="android.permission.RECORD_AUDIO"

也许是因为我使用的是 Samsung galaxy tab p1000 并且它运行的是 android 2.2?有什么想法吗?

非常感谢

最佳答案

我终于能够在我的 Arm5 (WM8650) 处理器上使用回声消除功能。以下是我采取的步骤。

  1. 在将 PCM 帧发送到编码器之前,我用 JNI 封装了 Speex 并调用了回显处理例程。无论我尝试了何种 Speex 设置,都没有回音被取消。

  2. 因为 Speex 对播放和回声帧之间的延迟非常敏感,所以我实现了一个队列并将所有发送到 AudioTrack 的数据包排队。队列的大小应大致等于内部 AudioTrack 缓冲区的大小。这样,当 AudioTrack 将数据包从其内部缓冲区发送到声卡时,数据包就会大致发送到 echo_playback。使用这种方法消除了延迟,但仍然没有取消回声

  3. 我用 JNI 包装了 WebRtc 回声消除部分,并在将数据包发送到编码器之前调用了它的方法。回声仍然存在,但图书馆显然试图取消它。

  4. 我应用了 P2 中描述的缓冲技术,它终于开始起作用了。但是,需要针对每个设备调整延迟。另请注意,WebRtc 具有回声消除的移动版和完整版。完整版会大大降低处理器速度,可能只能在 ARM7 上运行。手机版可以,但画质较差

我希望这会对某人有所帮助。

关于安卓回音消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6096316/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com