gpt4 book ai didi

android - AudioRecord 和 AudioTrack 延迟

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:12 28 4
gpt4 key购买 nike

我正在尝试为 android 开发类似 iRig 的应用程序,因此第一步是捕获麦克风输入并同时播放。

我有,但问题是我有一些延迟导致它无法使用,如果我开始处理缓冲区,我担心它会变得完全无法使用。

我像这样使用 audiorecord 和 audiotrack:

    new Thread(new Runnable() {
public void run() {
while(mRunning){
mRecorder.read(mBuffer, 0, mBufferSize);
//Todo: Apply filters here into the buffer and then play it modified
mPlayer.write(mBuffer, 0, mBufferSize);
//Log.v("MY AMP","ARA");
}

并以这种方式初始化:

// ==================== INITIALIZE ========================= //
public void initialize(){

mBufferSize = AudioRecord.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);

mBufferSize2 = AudioTrack.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);

mBuffer = new byte[mBufferSize];

Log.v("MY AMP","Buffer size:" + mBufferSize);

mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize);

mPlayer = new AudioTrack(AudioManager.STREAM_MUSIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize2,
AudioTrack.MODE_STREAM);

}

您知道如何获得更快的响应吗?谢谢!

最佳答案

Android 的 AudioTrack\AudioRecord 类由于最小缓冲区大小而具有高延迟。根据 Google 的说法,这些缓冲区大小的原因是为了最大限度地减少 GC 发生时的丢失(我认为这是一个错误的决定,您可以优化自己的内存管理)。

您想要做的是使用从 2.3 开始可用的 OpenSL。它包含用于流式音频的 native API。这是一些文档: http://mobilepearls.com/labs/native-android-api/opensles/index.html

关于android - AudioRecord 和 AudioTrack 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379063/

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