我正在尝试手动从麦克风构建音轨并查看其波形。
我像这样读取缓冲区:
double[] bufferSet = new double[blockSize*2]
//in a while loop
int bufferReadResult = audioRecord.read(buffer, 0, blockSize);
然后根据读取结果建立我自己的缓冲区。
所以 bufferSet
看起来有点像这样
//First second
j=1;
for(i=0; i<blockSize; i++) {
bufferSet[j*blockSize+i] = buffer[i];
}
//Second Second
j=2;
for(i=0; i<blockSize; i++) {
bufferSet[j*blockSize+i] = buffer[i];
}
所以此时我希望拥有一个 2 秒长的音频的 bufferSet
。问题是,当我绘制它时,我可以清楚地看到连接波形的 3 个缓冲区中的每一个都突然发生变化的部分。
缓冲区的填充有特定的顺序吗?它是从时间上从 0 开始(最早时刻到最后一个单位(时间上最晚)还是相反?
因此音频波形如下所示(2 秒)。您可以清楚地看到中间波形突然发生变化,因此它没有与前一秒的数据连接
总而言之,如何正确读取缓冲区,以便当我将其与以前的缓冲区连接时,它会按照接收时间的顺序生成连续波形?
最佳答案
double[] bufferSet = new double[blockSize*2]
//First second
j=1;
...
bufferSet[j*blockSize+i] = buffer[i];
...
//Second Second
j=2;
您不想在第一秒使用 j=0
,在第二秒使用 j=1
吗?
关于java - Android audioRecord.read 缓冲区连接以制作波形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002652/