Помещение файла wav в ArrayList, состоящий из коллекций фреймов - PullRequest
0 голосов
/ 15 мая 2019

Я использовал код для создания буфера из файла WAV, в котором данные читаются в блоках по 100 кадров.

Пожалуйста, см. Ссылку ниже для исходного кода:

http://www.labbookpages.co.uk/audio/javaWavFiles.html

Теперь мне нужно создать ArrayList, в котором каждый элемент состоит из 100 кадров из файла wav (первый элемент 0-99, второй 100-199 и т. Д.)

IУ меня проблемы с выяснением, как внедрить это в код, который я в настоящее время пробовал:

     // 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 голосов
/ 15 мая 2019

Я создал класс для фреймов, предполагая, что они хранятся в виде массива 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

...