如何在Java for Android中存储和操作byte[]数据块(录音)

如何在Java for Android中存储和操作byte[]数据块(录音),android,bytearray,audiorecord,Android,Bytearray,Audiorecord,我决不是一个经验丰富的程序员。我已经成功地让AudioRecord将麦克风数据直接写入文件(作为可读的.wav文件),因为它是从麦克风输入的,并借助于互联网上的许多代码片段 然而,对于我想用我的应用程序做的事情,我只需要保存来自麦克风的部分内容,我想我可以先将字节数据保存到某种数组中,这样我就可以有选择地使用我想要的内容并保存到文件中。与许多示例一样,我的麦克风数据读取类将数据读入字节数组,定义如下: byte data[] = new byte[audioBuffer]; 并以 read =

我决不是一个经验丰富的程序员。我已经成功地让AudioRecord将麦克风数据直接写入文件(作为可读的.wav文件),因为它是从麦克风输入的,并借助于互联网上的许多代码片段

然而,对于我想用我的应用程序做的事情,我只需要保存来自麦克风的部分内容,我想我可以先将字节数据保存到某种数组中,这样我就可以有选择地使用我想要的内容并保存到文件中。与许多示例一样,我的麦克风数据读取类将数据读入字节数组,定义如下:

byte data[] = new byte[audioBuffer];
并以

read = audio.read(data, 0, audioBuffer);
我的想法是将每个字节数据数组读入另一个数组后保存,然后在用户请求时将每个字节数据数组读回以保存到文件中。我尝试使用ArrayList保存数据数组:

private ArrayList<byte[]> grabArray = new ArrayList<byte[]>(grabArraySize);
当要求时,从临时保留阵列读取音频数据,以便保存到文件:

while(i < grabArraySize - 1){ // not writing the whole array - leaving out the last chunk
    if(i_write == grabArraySize){
        i_write = 0;
    }
    os.write(tempArray.get(i_write));
    i       += 1;
    i_write += 1;
}
现在,在我的录音线程中,我在grabArray中循环,将每个index=设置为传入的音频字节数组:

grabArray[i] = data;
然后,当我准备写入文件时,(在设置tempArray=grabArray之后;我这样做是为了防止AudioRecord线程在写入文件之前将一个新的音频块写入grabArray),我循环我的tempArray:

os.write(tempArray[i]);

在整个文件中,我仍然只得到一个重复的数据[](音频块)实例。我至少在正确的轨道上吗?

你能发布一些你正在尝试的代码吗?是的,当然-发布更多。很抱歉,我漏掉了很多东西-我宁愿把整件事都贴出来,但在这种情况下,我不认为这会使任何事情变得更容易-现在代码中有很多东西是不相关的,有点混乱。另外,一切似乎都很正常,我可以暂时将音频数据字节数组存储在某个位置,以便以后检索并保存到文件中,而不是直接保存到文件中,这样我就可以成功地完成。如果有机会,请提供您的解决方案。。
grabArray[i] = data;
os.write(tempArray[i]);