Сохраните их как 32- или 64-разрядные signed int
s или float
или double
, если вы не осведомлены о пространстве и не заботитесь о их упаковке в самое маленькое возможное место.
Образцы аудиосигналов часто отображаются как 24-битные аудио-аппаратные средства, так как это обычно является разрешением ЦАП и АЦП - хотя на большинстве компьютерных аппаратов не удивляйтесь, если вы найдете дно 3 из 4 бит случайным образом с шумом.
Операции цифровой обработки сигналов - что обычно происходит после сбора образцов - все это связано с добавлением взвешенных сумм выборок. Образец, хранящийся в целочисленном типе, можно считать бинарным с фиксированной точкой с подразумеваемой двоичной точкой в какой-либо произвольной точке - позиция, которую вы можете выбрать стратегически, чтобы поддерживать как можно больше бит точности.
Например, сумма двух 24-битовых целых чисел дает результат из 25 бит. После 8 таких дополнений 32-разрядный тип будет переполняться, и вам нужно будет нормализовать, округляя и сдвинув вправо.
Поэтому, если вы используете целые типы для хранения своих образцов, используйте максимально возможное число и начинайте с образцов в наименее значимых 24 бит.
Тип плавающей точки, конечно, позаботится об этой детали для вас, хотя у вас будет меньше выбора, когда происходит перенормировка. Они являются обычным выбором для обработки звука, где доступна аппаратная поддержка. Одна точность float
имеет 24-битную мантиссу, поэтому может содержать 24-битный образец без потери точности.
Обычно образцы с плавающей точкой хранятся в диапазоне -1.0f < x < 1.0f
.
Спасибо за ваш очень продуманный ответ о моей проблеме! Если бы вы были мной, какое аудио-образцовое представление вы бы предпочли использовать для обработки звука на Java, включая FFT и выравнивание? 32-разрядные целые числа или 32-битные поплавки? – ezpresso
Я не думаю, что в этом случае у вас есть другой выбор, кроме 'float'. БПФ в целочисленной арифметике - очень, очень тяжелая работа. – marko
Большое вам спасибо! Надо идти кодированием! – ezpresso