Мне нужна ваша помощь. Я хотел бы использовать следующий код, так как я разрабатываю звуковой инструмент (только для файлов .wav), основная функция которого отображает сигнал. Большой Endian, а также Little endian - это элементы, с которыми я не могу справиться. Правильно ли я думаю, что следующий код решает проблему таким образом, что: - если размер выборки аудио файла составляет 16 бит или 8 бит, а Большой конец или Маленький конец, он изменяет выборки с помощью массива audioData?Понимание большого endian, little endian (снова)
Если мои рассуждения верны, происходит ли перестановка всегда от большого конца до маленького конца?
Учитывается ли компьютерная архитектура? (Я имею в виду, если мой компьютер использует Little Endian, что происходит?)
Спасибо
int[] audioData = null;
if (format.getSampleSizeInBits() == 16) {
int nlengthInSamples = audioBytes.size()/2;
audioData = new int[nlengthInSamples];
// se Big Endian
if (format.isBigEndian()) {
for (int i = 0; i < nlengthInSamples; i++) {
// MSB calculation - Most Significant Bit
int MSB = (int) audioBytes.get(2 * i);
// LSB calculation - Least Significant Bit
int LSB = (int) audioBytes.get(2 * i + 1);
// (MSB << 8) MSB shift to the left by 8 position
// (255 & LSB) LSB masking so that LSB is <255 or =0
// putting both together
audioData[i] = MSB << 8 | (255 & LSB);
}
} else {
for (int i = 0; i < nlengthInSamples; i++) {
int LSB = (int) audioBytes.get(2 * i);
int MSB = (int) audioBytes.get(2 * i + 1);
audioData[i] = MSB << 8 | (255 & LSB);
}
}
Вам все еще нужна петля. –