我已使用from中的代码从wav文件创建缓冲区,在其中以100帧为块读取数据。
请查看下面的链接以获取原始代码:
http://www.labbookpages.co.uk/audio/javaWavFiles.html
我现在需要创建一个ArrayList,其中每个元素由wav文件中的100帧组成(第一个元素0-99,第二个100-199等...)
我在弄清楚如何在当前尝试的代码中实现这一点时遇到了麻烦:
// Display information about the wav file
wavFile.display();
// Get the number of audio channels in the wav file
int numChannels = wavFile.getNumChannels();
// Create a buffer of 100 frames
double[] buffer = new double[100 * numChannels];
int framesRead;
do
{
// Read frames into buffer
framesRead = wavFile.readFrames(buffer, 100);
}
while (framesRead != 0);
// Close the wavFile
wavFile.close();
我不确定应该以哪种方式构造或填充数组列表。
任何有关如何实现这一目标的建议将不胜感激。
答案 0 :(得分:0)
我为帧创建了一个类,假设它们存储为int
数组(可以很容易地为double
或要存储的任何其他类型进行修改)。该代码的想法是创建一个Frames
容器类,该容器类将用于创建ArrayList
,这将使以后可以轻松访问包含100个存储值的数组。
public class Frames {
private int[] frames;
public Frames() {
}
public Frames(int[] frames)
{
this.frames = frames;
}
public int[] getFrames() {
return frames;
}
public void setFrames(int[] frames) {
this.frames = frames;
}
}
这将在您的方法中用作示例:
ArrayList<Frames> list = new ArrayList<Frames>();
//This would be your 100 values stored as an array
int[] arr = {123,234,2342,1234124,12341};
Frames frames = new Frames(arr);
//Add the frames to the list(you will be doing this in a loop to continue adding them)
list.add(frames);
只需修改它即可添加从循环中获取的值。每次获取100个值的数组时,都声明new Frames(yourValues)
,然后将其添加到ArrayList