Я загрузил звуковой файл в bytearray. Я смущен тем, что мне нужно делать дальше, чтобы получить информацию для построения точек для формы волны. Из того, что я нашел в Интернете, мне нужно создать еще один массив? Может кто-нибудь объяснить мне, как это будет работать, поскольку я не совсем понимаю, как будут собираться образцы.
Java создает сигнал с образцами
Ответы (1)
Образцы собраны в соответствии с форматом файла. Скажем так, ваш аудиоформат представляет собой 8-битный одноканальный аудиофайл.
Это самый простой случай. Вы можете просто перебрать свой байт [] и нарисовать сохраненные значения как амплитуду.
Когда ваш файл представляет собой 16-битный аудиофайл, каждый образец состоит из 2 байтов, поэтому вам придется взглянуть на два байта для каждого образца. Вы можете сделать это, вызвав следующий метод:
private int getSixteenBitSample(int high, int low) {
return (high << 8) + (low & 0x00ff);
}
Он объединит первый и второй байт вашего массива байтов для каждого образца. Таким образом, ваш цикл будет выглядеть примерно так:
int sampleArray[] = new int[numSamples];
for(int i = 0, j=0;i < bytearray.length;)
{
int iLow = bytearray[i];
i++;
int iHigh = bytearray[i];
i++;
sampleArray[j] = getSixteenBitSample(iHigh, iLow);
j++;
}
Третий случай может заключаться в том, что ваш файл представляет собой 16-битный стереофонический аудиофайл. В этом случае каждый образец имеет два байта, и после каждого байта меняется канал.
Например:
First read sample 1 from byte 0 and byte 1. -> First sample of channel 1
Second read sample 2 from byte 2 and byte 3 -> First sample of channel 2
Third read sample 3 from byte 4 and byte 5 -> Second sample of channel 1
Forth read sample 4 from byte 6 and byte 7 -> Second sample of channel 2
Более подробное описание см. на этой странице.
AudioFormat
. НАПРИМЕР. Моно, 8-битный формат будет иметь 1 байт на кадр. Каждый байт будет представлять амплитуду сигнала. - person Andrew Thompson   schedule 08.11.2012