WAV Information Reader by TheOneRing2nd Sep 2003 11:57
|
---|
Summary An include file with functions to read WAV header information, such as sample rate, length, etc... Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com REMSTART File Name: WAV Reader.dba Description: A set of functions to read the header information of a WAV file. As of now, these functions only support WAVE type RIFF files, and only the most basic types. This assumes that the file is laid out like: RIFF Chunk Offset Length Contents ----------------------------------------------------- 0 4 bytes 'RIFF' 4 4 bytes file length 8 4 bytes 'WAVE' FMT Chunk Offset Length Contents ----------------------------------------------------- 12 4 bytes 'fmt ' 16 4 bytes 16 (length of FMT chunk, 16 bytes) 20 2 bytes 1 (format tag: 1 = PCM) 22 2 bytes channels (1 = mono, 2 = stereo) 24 4 bytes sample rate (e.g. 44100 kHz) 28 4 bytes bytes per second 32 2 bytes block align 34 2 bytes bits per sample (8 or 16) DATA Chunk Offset Length Contents ----------------------------------------------------- 36 4 bytes 'data' 40 4 bytes data block size 44 - sample data Copyright (c)2003 Adam Presley a.k.a. The One Ring REMEND function WavToMemblock(Filename$, FileNumber, MemblockNumber) open to read FileNumber, Filename$ make memblock from file FileNumber, MemblockNumber close file FileNumber endfunction function IsValidWav(MemblockNumber) reuslt = 0 desc = memblock dword(MemblockNumber, 0) wavType = memblock dword(MemblockNumber, 8) if (desc = 1179011410) and (wavType = 1163280727) then result = 1 endfunction result function GetWavFormat$(MemblockNumber) result$ = "" format = 0 format = memblock word(MemblockNumber, 20) select format case 1 result$ = "pcm" endcase case default result$ = "other" endcase endselect endfunction result$ function GetWavChannels(MemblockNumber) channels = memblock word(MemblockNumber, 22) endfunction channels function GetWavSampleRate(MemblockNumber) sampleRate = memblock dword(MemblockNumber, 24) endfunction sampleRate function GetWavBitsPerSample(MemblockNumber) bitsPerSample = memblock word(MemblockNumber, 34) endfunction bitsPerSample function GetWavLengthInMilliseconds#(MemblockNumber) bitsPerSecond# = memblock dword(MemblockNumber, 28) dataSize# = memblock dword(MemblockNumber, 40) length# = (dataSize# / bitsPerSecond#) * 1000.0 endfunction length# function GetWavLengthInSeconds#(MemblockNumber) bitsPerSecond# = memblock dword(MemblockNumber, 28) dataSize# = memblock dword(MemblockNumber, 40) length# = dataSize# / bitsPerSecond# endfunction length# |