Имеет ли 24-битный блок данных wav-файла байты со знаком или без знака?
Я пытаюсь написать программу, которая будет создавать 24-битные файлы WAV с использованием Java. Java звук API не поддерживает 24-битный звук, поэтому я пытаюсь записать файл с нуля. Это началось как случайный интерес, но стало эпическим поиском битов, байтов, знаков и кусков.
Имеет ли 24-битный блок данных wav-файла байты со знаком или без знака?
Отсутствие в Java беззнаковых байтов разочаровывает. Я читал, что битовые маскированные целые числа могут использоваться для представления байтов без знака, но мне интересно, как это будет представлено в окончательном выводе в файл.
Извините за расхождение... мой вопрос "Имеет ли 24-битный блок данных wav-файла подписанные или неподписанные байты?"
В любом случае мне придется выяснить этот подписанный / неподписанный бизнес, но я не могу найти ответ относительно блока данных в ссылках, которые я нашел.
2 ответа
Я также могу подтвердить, что 24-битные данные в файлах WAV подписаны (когда данные хранятся в формате WAVE_FORMAT_PCM). В более общем смысле, данные WAVE_FORMAT_PCM всегда подписываются, КРОМЕ ТОГО, когда они составляют 8 бит на выборку.
Согласно этому (и моему личному опыту) файлы Microsoft WAVE используют целые числа со знаком 2 в дополнении для представления выборок PCM размером более 8 бит. По умолчанию, порядок байтов этих целых чисел является прямым порядком байтов.
Ты можешь использовать soxi
из пакета SoX, чтобы проверить это в ваших собственных тестовых файлах (у вас есть, верно?).
Обратите внимание, что файлы WAVE также могут содержать аудиоформаты, отличные от обычного PCM.