TGC Codebase Backup



WAV Information Reader by TheOneRing

2nd 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#