Почему вы делите разрядность на 8 при вычислении размера файла PCM?

#audio #size #wav #pcm

Вопрос:

Итак, в принципе, я думал, что формула для вычисления размера файла pcm выглядит следующим образом:

 fileSize(in bits) = samples_per_sec x seconds x number_of_channels
 

И это сработало для меня просто отлично, так как я имел дело исключительно с файлами pcm, которые имели 8-битную глубину.
Когда я начал работать с файлами 16-битной глубины, формула не давала точных результатов.
Через некоторое гугление я обнаружил, что моя упомянутая формула была неправильной, на самом деле вы должны придерживаться этой:

 fileSize(in bits) = samples_per_sec x seconds x number_of_channel x bit_depth/8
 

Это объясняет, почему я получал правильные результаты с неправильной формулой, так как, вы знаете, 8/8 = 1.

Чего я не понимаю, так это вот чего: зачем вам нужно делить разрядность на восемь?
Чтобы получить биты в результате ваших вычислений, вы также должны получить их в правой части вашей формулы:

 bits = samples/seconds x seconds x  num_of_channels(dimensionless) x bits/sample = bits
 

и это прекрасно. Таким образом, он должен работать без деления на восемь. Но это не так.
Где я ошибаюсь?

Комментарии:

1. под num_of_channels(dimensionless) этим вы подразумеваете, что num_of_channels в нем нет единиц измерения или что-то совсем другое?

2. @fdcpp Да, я имею в виду, что в нем нет единиц измерения

3. прекрасно, в таком случае мой ответ остается в силе

Ответ №1:

В вашем стиле обозначения:

  • samples_per_sec x seconds x number_of_channels является общее количество образцов
  • samples_per_sec x seconds x number_of_channel x bit_depth является общее количество битов
  • samples_per_sec x seconds x number_of_channel x bit_depth / 8 является общим количеством байтов
  • samples/seconds x seconds x num_of_channels(dimensionless) x bits/sample есть sample_rate x duration_in_seconds x num_of_channels x bit_depth , что опять же является общим количеством битов

Основная путаница, скорее всего, связана с битами и байтами. Размер выборки аудио обычно описывается в разрядности, а не в байтах. Размер файла / память обычно описывается в байтах. Чтобы перейти от битов к байтам, вы просто делите их на 8.

Комментарии:

1. Очевидно, что все методы моего скрипта, которые имеют дело с размерами файлов, выводят их в байтах, вот почему это сработало для меня. Большое спасибо