Я использовал следующий код (на основе кода, найденного на этом сайте: http://www.labbookpages.co.uk/audio/javaWavFiles.html) для чтения файла wav и создания буфера двойных значений (аудиокадров):
// Open the wav file specified as the first argument
WavFile wavFile = WavFile.openWavFile(new File("recording_1536059009.wav"));
sampleRate = (int) wavFile.getSampleRate();
System.out.println("SR " + sampleRate);
// Display information about the wav file
wavFile.display();
System.out.println("");
// Create a variable that stores number of frames in file.
int numFrames = (int) wavFile.getNumFrames();
double duration = numFrames/sampleRate;
System.out.println("duration is " + duration);
// Get the number of audio channels in the wav file
int numChannels = wavFile.getNumChannels();
// Create a buffer of frames
double[] buffer = new double[numFrames * numChannels];
int framesRead;
do {
// Read frames into buffer
framesRead = wavFile.readFrames(buffer, numFrames);
} while (framesRead != 0);
Затем я разделяю буфер на порции секций высокой энергии на основе порогового значения: (порции - это группы последовательных кадров (двойные значения), которые выше этого порога, они будут выглядеть примерно так).
3.0517578125E-5
9.1552734375E-5
3.0517578125E-5
9.1552734375E-5
Это код, который я использовал для разделения буфера двойных значений на эти «чанки», составляющие значимое событие.
ArrayList<Double> significantEvent = new ArrayList<Double>();
ArrayList<ArrayList<Double>> significantEventCollect = new ArrayList<ArrayList<Double>>();
for (int loop = 0; loop < buffer.length; loop++) {
if (buffer[loop] >= threshold) {
significantEvent.add(buffer[loop]);
System.out.println(buffer[loop]);
} else if (buffer[loop] < threshold && significantEvent.size() > 0) {
System.out.println("");
significantEventCollect.add(significantEvent);
significantEvent = new ArrayList<Double>();
Я бы хотел превратить эти чанки обратно в их собственный файл WAV, чтобы они моглибудет воспроизведено.
До сих пор я не нашел возможности добиться этого с помощью одних только этих данных.
Любые указания относительно моих следующих шагов для этого были бы весьма признательны.