java - Android audioRecord.read 缓冲区连接以制作波形

标签 java android audiorecord

我正在尝试手动从麦克风构建音轨并查看其波形。

我像这样读取缓冲区:

 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 秒)。您可以清楚地看到中间波形突然发生变化,因此它没有与前一秒的数据连接

enter image description here

总而言之,如何正确读取缓冲区,以便当我将其与以前的缓冲区连接时,它会按照接收时间的顺序生成连续波形?

最佳答案

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/

相关文章:

java - 无法连接到 (EWS) 公共(public)日历文件夹 Java

android - 使用应用程序上下文滑动图像加载

java - 录制带有准确时间戳的音频

java - jackson 在反序列化时抛出 JsonMappingException;需要单字符串构造函数?

java - JSF2 : Submit AJAX form

java - getItemViewType 仅在 onBindViewHolder 中返回,但在 onCreateViewHolder 中不返回

android - Android 10 中的服务器连接问题

带有 TextView 的 Android LinearLayout

android - 应用崩溃时如何释放Android资源

java - Android:audioRecorder.getState() 在 Samsung Galaxy Tab 中发送 0