# Pink Panther Pinkadelic Pursuit .psk math DUMP_AIFF_AS_IS = 1 # better :) get ENTRIES long for ENTRY = 0 < ENTRIES endian little get ENTRY_SIZE long savepos ENTRY_OFF if DUMP_AIFF_AS_IS != 0 string NAME p "%d.aifc" ENTRY log NAME ENTRY_OFF ENTRY_SIZE else endian big idstring "FORM" get CHUNK_SIZE long getdstring MAIN_TYPE 4 # AIFF for CHUNK_SIZE -= 4 != 0 getdstring TYPE 4 get SIZE long savepos OFFSET string NAME p "%s/%s/" MAIN_TYPE TYPE if TYPE u== "COMM" get CHANNELS short get DUMMY long # SAMPLES ??? get BITS short get FREQUENCY_FLOAT short get FREQUENCY short math CODEC = 1 elif TYPE u== "SSND" callfunction TOWAV 1 else log NAME OFFSET SIZE endif math OFFSET + SIZE goto OFFSET math CHUNK_SIZE - 4 math CHUNK_SIZE - 4 math CHUNK_SIZE - SIZE next endif math ENTRY_OFF + ENTRY_SIZE goto ENTRY_OFF next ENTRY # Requirements: CODEC, BITS, FREQUENCY, CHANNELS, OFFSET, SIZE and NAME # Optional: RIFF_MORE/RIFF_MORE_SIZE, BLKALIGN and SAMPLES startfunction TOWAV # (aka DUMP_WAV) 0.2.1 endian save TOWAV_ENDIAN endian little math AVGBYTES = 0 if BLKALIGN == 0 if BITS >= 8 math BLKALIGN = BITS math BLKALIGN / 8 else math BLKALIGN = 1 endif math BLKALIGN * CHANNELS math AVGBYTES = FREQUENCY math AVGBYTES * BLKALIGN endif if CODEC == 0x69 xmath BLOCKALIGN "36 * CHANNELS" xmath AVGBYTES "(689 * BLOCKALIGN) + 4" endif log MEMORY_FILE 0 0 putdstring "RIFF" 4 MEMORY_FILE put 0 long MEMORY_FILE putdstring "WAVE" 4 MEMORY_FILE # "fmt " putdstring "fmt " 4 MEMORY_FILE put 0 long MEMORY_FILE put CODEC short MEMORY_FILE # wFormatTag: Microsoft PCM Format (0x0001) put CHANNELS short MEMORY_FILE # wChannels put FREQUENCY long MEMORY_FILE # dwSamplesPerSec put AVGBYTES long MEMORY_FILE # dwAvgBytesPerSec put BLKALIGN short MEMORY_FILE # wBlockAlign put BITS short MEMORY_FILE # wBitsPerSample if RIFF_MORE_SIZE > 0 putdstring RIFF_MORE RIFF_MORE_SIZE MEMORY_FILE endif get MEM_SIZE asize MEMORY_FILE math RIFFTMP = MEM_SIZE math RIFFTMP - 0x14 putvarchr MEMORY_FILE 0x10 RIFFTMP long # "fact" if CODEC != 1 if SAMPLES > 0 putdstring "fact" 4 MEMORY_FILE put 4 long MEMORY_FILE put SAMPLES long MEMORY_FILE endif endif # "data" putdstring "data" 4 MEMORY_FILE put SIZE long MEMORY_FILE get MEM_SIZE asize MEMORY_FILE math RIFFTMP = SIZE math RIFFTMP + MEM_SIZE math RIFFTMP - 8 putvarchr MEMORY_FILE 4 RIFFTMP long log NAME 0 MEM_SIZE MEMORY_FILE append if TOWAV_ENDIAN != 0 encryption swap 2 endif log NAME OFFSET SIZE if TOWAV_ENDIAN != 0 encryption "" "" endif append endian restore TOWAV_ENDIAN endfunction