使用字节时Android AudioRecord延迟,而不是在使用和短路时

问题描述 投票:0回答:1

我正在开发一个Xamarin Android应用程序,其中录制视频和音频以及一些播放音乐。我需要将所有这些流合并在一起。

我想在audioRecord.read()函数中使用byte [](或者我也尝试过的ByteBuffer)录制音频时想弄清楚我缺少了什么。输出WAV文件似乎是正确的(显然可以44100Hz的采样率播放),但是在几秒钟之后出现延迟并且趋于变得越来越大。

使用短片时,MIC录制的音频没有任何延迟。使用短裤的一个大问题是,我做的不多,我的采样率不能高于8000hz(但这不是当前的问题,尽管如果有人知道如何修复它我会接受它:))

最后合并的文件是带有AAC音频的mp4,使用ffmpeg合并,但我认为这不是问题。

它可能与8000Hz(使用短路)和44100Hz(使用字节)有关吗?或者我在使用byte []时添加一些东西,因为我不检查读取了多少字节?

以下是该问题涉及的部分:

//output file initialization
mDataOutputStream = new FileOutputStream(new Java.IO.File(mRawFilePath));

public void Run()
{

...

short[] shortBuf = new short[bufferSize / 2];
//byte[] byteBuf = new byte[bufferSize];

while(isRecording) {
    //using shorts
    audioRecorder.Read(shortBuf, 0, shortBuf.Length);
    WriteShortsToFile(buf);

    //using byte[]
    //audioRecorder.Read(byteBuf, 0, byteBuf.Length);
    //WriteBytesToFile(buf);    
}

...

}

public void WriteShortsToFile(short[] shorts)
{
    for (int i = 0; i < shorts.Length; i++)
    {
        mDataOutputStream.WriteByte(shorts[i] & 0xFF);
        mDataOutputStream.WriteByte((shorts[i] >> 8) & 0xFF);
    }
}

public void WriteBytesToFile(byte[] buf)
{
    mDataOutputStream.Write(buf);
}
android xamarin audiorecord
1个回答
0
投票

终于让它按预期工作了。

我将short数组的分配大小更改为bufferSize。

© www.soinside.com 2019 - 2024. All rights reserved.