Определение частоты дискретизации и битовой глубины звука в зависимости от размера файла
Мне нужна помощь с математикой / логикой здесь. Работа с AIF-файлами.
Я написал следующее:
LnByte = FileLen(ToCheck) 'Returns Filesize in Bytes
LnBit = LnByte * 8 'Get filesize in Bits
Chan = 1 'Channels in audio: mono = 1
BDpth = 24 'Bit Detph
SRate = 48000 'Sample Rate
BRate = 1152000 'Expected Bit Rate
Time_Secs = LnBit / Chan / BDpth / SRate 'Size in Bits / Channels / Bit Depth / Sample Rate
FSize = (BRate / 8) * Time_Secs '(Bitrate / 8) * Length of file in seconds
ToCheck - текущий файл при циклическом просмотре папки с файлами.
Поэтому я нахожу длину звука в зависимости от размера файла в битах / каналах / битовой глубине / частоте дискретизации. Это предполагает, что глубина в битах и частота дискретизации являются правильными (мне нужно, чтобы файлы были 24-бит /48 кГц).
Time_Secs = Длина файла в секундах.
FSize = размер файла на основе 24/48 кГц с использованием Time_Secs
Возможно, из-за того, что FSize использует Time_Secs, я не могу понять, как, исходя из этого, выяснить, действительно ли частота дискретизации файла и / или глубина в битах действительно верны...
Предполагая, что 24 /48k должны дать 144 000 байт в секунду
Предполагая, что 16/48k должны дать 96000 байт в секунду
Если я проверяю файл 16-бит /48 кГц, используя приведенный выше код, он дает неправильное время в секундах (естественно), но правильный размер файла... даже если битрейт равен 1 152 000, он должен быть неправильным. - Казалось бы, разница во времени компенсирует разницу в битрейте - или я смотрю на это неправильно.
Как мне адаптировать мою формулу или выполнить математические расчеты, если частота дискретизации / битовая глубина файла на самом деле составляет 48 000 Гц / 24-бит? Или совсем другой путь? Помня, что это aif файлы, а не wavs.
Надеюсь, что это имеет смысл.
Спасибо заранее!