Добавил функцию.

;code for B3D: impersonalis (icq 11-999-51-51)
;info: https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
; http://www.gamedev.ru/code/forum/?id=38568
Function imp_MusProperty_GetByteStr$(bank%,start%,l%=4)
Local s$=""
Local i%
Local endi%=start+(l-1)
For i=start To endi
s=s+Chr(PeekByte(bank,i))
Next
Return s
End Function
Function imp_MusProperty_Short2Int%(a%)
Local M1%=%00000000000000001000000000000000
Local M2%=%11111111111111110000000000000000
Local D%=a And M1
If D
a = a Xor M2
EndIf
Return a
End Function
Type T_imp_MusProperty_Wav
Field ChunkID$
Field ChunkSize%
Field Format$
Field Subchunk1ID$
Field Subchunk1Size%
Field AudioFormat%
Field NumChannels%
Field SampleRate%
Field ByteRate%
Field BlockAlign%
Field BitsPerSample%
Field Subchunk2ID$
Field Subchunk2Size%
End Type
Function imp_MusProperty_WavFileProc.T_imp_MusProperty_Wav(filename$)
Local WP.T_imp_MusProperty_Wav=New T_imp_MusProperty_Wav
Local i%
Local file%=ReadFile(filename)
If file=0
RuntimeError "Cannot open "+filename
EndIf
Local RIFF_chunk%=CreateBank(12)
Local fmt_subchunk%=CreateBank(24)
Local data_subchunk%=CreateBank(8)
ReadBytes(RIFF_chunk,file,0,BankSize(RIFF_chunk))
ReadBytes(fmt_subchunk,file,0,BankSize(fmt_subchunk))
ReadBytes(data_subchunk,file,0,BankSize(data_subchunk))
CloseFile(file)
WP\ChunkID=imp_MusProperty_GetByteStr(RIFF_chunk,0)
WP\ChunkSize=PeekInt(RIFF_chunk,4)
WP\Format=imp_MusProperty_GetByteStr(RIFF_chunk,8)
WP\Subchunk1ID=imp_MusProperty_GetByteStr(fmt_subchunk,0)
WP\Subchunk1Size=PeekInt(fmt_subchunk,4)
WP\AudioFormat=imp_MusProperty_Short2Int(PeekShort(fmt_subchunk,8))
WP\NumChannels=imp_MusProperty_Short2Int(PeekShort(fmt_subchunk,10))
WP\SampleRate=PeekInt(fmt_subchunk,12)
WP\ByteRate=PeekInt(fmt_subchunk,16)
WP\BlockAlign=imp_MusProperty_Short2Int(PeekShort(fmt_subchunk,20))
WP\BitsPerSample=imp_MusProperty_Short2Int(PeekShort(fmt_subchunk,22))
WP\Subchunk2ID=imp_MusProperty_GetByteStr(data_subchunk,0)
WP\Subchunk2Size=PeekInt(data_subchunk,4)
FreeBank(RIFF_chunk)
FreeBank(fmt_subchunk)
FreeBank(data_subchunk)
Return WP
End Function
Function imp_MusProperty_IsWav%(WP.T_imp_MusProperty_Wav)
Return WP\Format="WAVE"
End Function
Function imp_MusProperty_GetWavTimeInSec#(WP.T_imp_MusProperty_Wav)
Return WP\Subchunk2Size / Float( (WP\BitsPerSample / 8.0) * WP\NumChannels * WP\SampleRate)
End Function
imp_MusProperty_GetWavTimeInSec возвращает время воспроизведения звукового файла в секундах (float). Кстати, неплохо бы потестить (у меня пашет).