将WAV文件放入包含帧集合的ArrayList中

时间:2019-05-15 14:42:29

标签: java arraylist buffer wav

我已使用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();

我不确定应该以哪种方式构造或填充数组列表。

任何有关如何实现这一目标的建议将不胜感激。

1 个答案:

答案 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