Я изо всех сил пытаюсь понять данные формата аудио 24-битного моно PCM и прочитать эти данные на Java.
Я понимаю и могу прочитать заголовок RIFF, но не могу понять, как читать 24-битные образцы PCM.Мне нужно прочитать образцы PCM по одному.
Если предположить кодирование с прямым порядком байтов , это должно помочь вам начать:
// constant holding the minimum value of a signed 24bit sample: -2^22. private static final int MIN_VALUE_24BIT = -2 << 22; // constant holding the maximum value a signed 24bit sample can have, 2^(22-1). private static final int MAX_VALUE_24BIT = -MIN_VALUE_24BIT-1; [...] // open your AudioInputStream using AudioSystem and read values into a buffer buf [...] final byte[] buf = ... ; // your audio byte buffer final int bytesPerSample = 3; // because 24 / 8 = 3 // read one sample: int sample = 0; for (int byteIndex = 0; byteIndex < bytesPerSample; byteIndex++) { final int aByte = buf[byteIndex] & 0xff; sample += aByte << 8 * (byteIndex); } // now handle the sign / valid range final int threeByteSample = sample > MAX_VALUE_24BIT ? sample + MIN_VALUE_24BIT + MIN_VALUE_24BIT : sample; // do something with your threeByteSample / read the next sample
См. jipes AudioSignalSource для более общей обработки декодирования PCM.