Я работаю над чем-то, связанным с чтением аудиоданных. Мне нужно преобразовать байт [] аудиоданных в двойной [] (и наоборот).
Мне нужно преобразование, чтобы пропустить сигнал через фильтр нижних частот.
Для преобразования байтов формы в дубликаты я использую следующий фрагмент кода:
// where data is the byte array.
ByteBuffer byteBuffer = ByteBuffer.wrap(data);
// make sure that the data is in Little endian order.
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
// every double will represent 2 bytes (16bit audio sample)
// so the double[] is half length of byte[]
double[] doubleData = new double[data.length / 2];
int i = 0;
while (byteBuffer.remaining() > 2) {
// read shorts (16bits) and cast them to doubles
short t = byteBuffer.getShort();
doubleData[i] = t;
doubleData[i] /= 32768.0;
i++;
}
Я не знаю, является ли это лучшим способом или нет, особенно потому, что он дает «исключение Java из пространства кучи» с большим количеством байтов данных.
Итак, подведем итог:
- Есть ли лучший способ сделать преобразование, , который не занимает место в куче ?
- как снова преобразовать двойные числа в байты?
Любая помощь приветствуется
Спасибо
Самер Сами