ここで数学/論理の助けが必要です。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 ビット/48kHz である必要があります)。
Time_Secs = 秒単位のファイルの長さ。
FSize = Time_Secs を使用した 24/48kHz に基づくファイル サイズ
おそらく、FSize が Time_Secs を使用しているため、ファイルのサンプル レートやビット深度が実際に正しいかどうかをこれから判断する方法がわかりません...
24/48k で 1 秒あたり 144,000 バイトになると仮定すると、
16/48k で 1 秒あたり 96,000 バイトと仮定すると、
上記のコードを使用して 16 ビット/48 kHz のファイルをチェックすると、(当然のことながら) 秒単位で間違った時間が表示されますが、正しいファイル サイズが表示されます... ビット レートが 1,152,000 であっても、間違っているはずです。-- 時間の違いがビット レートの違いを補っているように見えます - または、私の見方が間違っています。
ファイルのサンプル レート/ビット深度が実際に 48,000 Hz/24 ビットである場合、数式をどのように適合させますか、または計算を実行しますか? それともまったく別の方法がありますか?wav ではなく aif ファイルであることを思い出してください。
それが理にかなっていることを願っています。
よろしくお願いします!