- ;usage: $wav(fichier).channels|format|frequency|bps|bpsample|length
- alias wav {
- var %size = $file($1-).size
- if (!%size) return 0
- bread " $+ $1- $+ " 0 2048 &wav
- ;Un fichier WAV qui se respecte, commence toujours par RIFF
- if ($bvar(&wav,1,4).text != RIFF) return
- ;chunck format
- var %pos = $bfind(&wav,5,fmt)
- if (!%pos) return
- ;chunck data
- var %pos2 = $bfind(&wav,%pos,data)
- ;on 'enlève' la taille des headers
- dec %size $calc(%pos2 + 8 + $bvar(&wav,%pos2,$calc(%pos2 + 4)).long)
- if ($prop == channels) return $bvar(&wav,$calc(%pos + 10)).word
- if ($prop == format) {
- var %name = G723_ADPCM ANTEX_ADPCME G721_ADPCM APTX AUDIOFILE_AF36 AUDIOFILE_AF10 CONTROL_RES_VQLPC CONTROL_RES_CR10 CREATIVE_ADPCM DOLBY_AC2 DSPGROUP_TRUESPEECH DIGISTD DIGIFIX DIGIREAL DIGIADPCM ECHOSC1 FM_TOWNS_SND IBM_CVSD OLIGSM OLIADPCM OLICELP OLISBC OLIOPR IMA_ADPCM DVI_ADPCM UNKNOWN PCM ADPCM ALAW MULAW GSM610 MPEG NMS_VBXADPCM OKI_ADPCM SIERRA_ADPCM SONARC MEDIASPACE_ADPCM YAMAHA_ADPCM
- var %num = 20 51 64 37 36 38 52 55 512 48 34 21 22 53 54 35 768 5 4096 4097 4098 4099 4100 17 0 1 2 6 7 49 80 56 16 19 33 18 32
- return $gettok(%name,$findtok(%num,$bvar(&wav,$calc(%pos + 8)).word,32),32)
- }
- if ($prop == frequency) return $bvar(&wav,$calc(%pos + 12)).long
- if ($prop == bps) return $bvar(&wav,$calc(%pos + 16)).long
- if ($prop == bpsample) return $bvar(&wav,$calc(%pos + 22)).word
- ;taille divisée par le taux bits par seconde
- if ($prop == length) return $int($calc(%size / $bvar(&wav,$calc(%pos + 16)).long))
- return $1-
- }
;usage: $wav(fichier).channels|format|frequency|bps|bpsample|length
alias wav {
var %size = $file($1-).size
if (!%size) return 0
bread " $+ $1- $+ " 0 2048 &wav
;Un fichier WAV qui se respecte, commence toujours par RIFF
if ($bvar(&wav,1,4).text != RIFF) return
;chunck format
var %pos = $bfind(&wav,5,fmt)
if (!%pos) return
;chunck data
var %pos2 = $bfind(&wav,%pos,data)
;on 'enlève' la taille des headers
dec %size $calc(%pos2 + 8 + $bvar(&wav,%pos2,$calc(%pos2 + 4)).long)
if ($prop == channels) return $bvar(&wav,$calc(%pos + 10)).word
if ($prop == format) {
var %name = G723_ADPCM ANTEX_ADPCME G721_ADPCM APTX AUDIOFILE_AF36 AUDIOFILE_AF10 CONTROL_RES_VQLPC CONTROL_RES_CR10 CREATIVE_ADPCM DOLBY_AC2 DSPGROUP_TRUESPEECH DIGISTD DIGIFIX DIGIREAL DIGIADPCM ECHOSC1 FM_TOWNS_SND IBM_CVSD OLIGSM OLIADPCM OLICELP OLISBC OLIOPR IMA_ADPCM DVI_ADPCM UNKNOWN PCM ADPCM ALAW MULAW GSM610 MPEG NMS_VBXADPCM OKI_ADPCM SIERRA_ADPCM SONARC MEDIASPACE_ADPCM YAMAHA_ADPCM
var %num = 20 51 64 37 36 38 52 55 512 48 34 21 22 53 54 35 768 5 4096 4097 4098 4099 4100 17 0 1 2 6 7 49 80 56 16 19 33 18 32
return $gettok(%name,$findtok(%num,$bvar(&wav,$calc(%pos + 8)).word,32),32)
}
if ($prop == frequency) return $bvar(&wav,$calc(%pos + 12)).long
if ($prop == bps) return $bvar(&wav,$calc(%pos + 16)).long
if ($prop == bpsample) return $bvar(&wav,$calc(%pos + 22)).word
;taille divisée par le taux bits par seconde
if ($prop == length) return $int($calc(%size / $bvar(&wav,$calc(%pos + 16)).long))
return $1-
}