home *** CD-ROM | disk | FTP | other *** search
- {
- << parse a sound file and return
- offset (in bytes) of sample data
- start and sampling rate. >>
-
- Currently handles IFF 8SVX format.
- If format is unknown, a default
- sampling rate is assumed.
-
- Author: David J Benn
- Date: 6th,7th April,16th May,
- 30th June,
- 1st,3rd,4th,8th July 1992,
- 7th January 1992
- }
-
- library exec
-
- declare function AllocMem& library exec
- declare function FreeMem library exec
- declare function xRead& library dos
-
- longint offset&,samples_per_second&
-
- SUB parse_sample(f$)
- shared offset&,samples_per_second&
- const default_rate=10000&
- const NOTOK=-1
- const OK=0
-
- { if IFF 8SVX sample, return
- offset from start of file to
- sample data and sampling rate in
- samples per second. }
-
- open "I",1,f$
-
- '..FORM#### ?
- dummy$ = input$(8,#1)
-
- '..8SVX ?
- x$ = input$(4,#1)
-
- if x$="8SVX" then
- sample_format$="IFF 8SVX"
- '..skip VHDR###
- dummy$ = input$(8,#1)
-
- '..skip ULONGs x 3
- dummy$ = input$(12,#1)
- '..get sampling rate bytes
- hi%=asc(input$(1,#1)) '..high byte
- lo%=asc(input$(1,#1)) '..low byte
- samples_per_second&=hi%*256 + lo%
-
- '..find BODY
- '..skip rest of Voice8Header structure
- dummy$ = input$(6,#1)
- offset&=40 '..bytes up to this point
- repeat
- repeat
- x$=input$(1,#1)
- offset&=offset&+1
- until x$="B" and not eof(1)
- if not eof(1) then
- body$=input$(3,#1)
- offset&=offset&+3
- end if
- until body$="ODY" and not eof(1)
-
- if not eof(1) then
- x$=input$(4,#1) '..skip ####
- offset&=offset&+4
- else
- close 1
- parse_sample=NOTOK
- library close exec
- exit sub
- end if
- close 1
- else
- close 1
- sample_format$="unknown"
- offset&=0
- samples_per_second&=default_rate
- parse_sample=OK
- library close exec
- end if
-
- END SUB
-
- SUB calc_period&(samples_per_second&)
- calc_period& = 3579546 \ samples_per_second&
- END SUB
-
- SUB calc_duration(per&,bytes&)
- calc_duration=.279365*per&*bytes&/1e6*18.2
- END SUB
-