Мне нужна помощь с математикой / логикой.Работа с 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 должно выдавать 96 000 байт в секунду
Если я проверяю файл с 16-битной / 48 кГц, используя приведенный выше код, он дает неправильное время в секундах (естественно), но правильный размер файла ... дажехотя битрейт равен 1 152 000, он должен быть неправильным.- Казалось бы, разница во времени компенсирует разницу в битрейте - или я смотрю на это неправильно.
Как бы я адаптировал свою формулу или сделал бы математические расчеты, есличастота дискретизации / битовая глубина файла на самом деле 48000 Гц / 24-бит?Или есть другой путь полностью?Помня, что это aif файлы, а не wavs.
Надеюсь, это имеет смысл.
Большое спасибо заранее!