INCLUDE "constants.bas" Mode 0,6,0,6,0 Border 6,0 ' ' This is the way to invoke a sound sample (2 variables init) ' sound_counter = 0 #pointer = 0 ON FRAME GOSUB play_sound Wait Print At 0*20+10 Color 5 , "Pt3 player" Print At 1*20+10 Color 5 , <6> varptr end_file(0) - varptr #sound_data(0) #line = 1 WHILE 1 Print At 0*20 Color 5 ,<5>FRAME Print At 1*20 Color 5 ,<5>#pointer Print At 2*20 Color 5 ,<5>#flags Print At 3*20 Color 5 ,<5>sound_counter Print At 4*20 Color 5 ,<5>#line WAIT WEND ' ' The main sound playing routine ' play_sound: PROCEDURE if sound_counter = 0 then #flags = #sound_data(#pointer) if #flags = 0 then #pointer=0:#line = 1:RETURN #line = #line + 1 #pointer = #pointer + 1 if #flags AND 1 then if #flags AND 32 then SOUND 0,#sound_data(#pointer) / 16, 48 else SOUND 0,#sound_data(#pointer) / 16, #sound_data(#pointer) AND $0F end if #pointer = #pointer + 1 end if if #flags AND 2 then if #flags AND 64 then SOUND 1,#sound_data(#pointer) / 16, 48 else SOUND 1,#sound_data(#pointer) / 16, #sound_data(#pointer) AND $0F end if #pointer = #pointer + 1 end if if #flags AND 4 then if #flags AND 128 then SOUND 2,#sound_data(#pointer) / 16, 48 else SOUND 2,#sound_data(#pointer) / 16, #sound_data(#pointer) AND $0F end if #pointer = #pointer + 1 end if ' Volume envelop (period and shape) if #flags AND 8 then SOUND 3,#sound_data(#pointer), #flags/256/16 #pointer = #pointer + 1 end if ' Noise and mix register if #flags AND 16 then SOUND 4,#sound_data(#pointer) and 31, (#sound_data(#pointer)/256) and 63 #pointer = #pointer + 1 end if sound_counter = (#flags / 256) and 15 else sound_counter = sound_counter - 1 end if end ASM ORG $C040 ' The chunks of sound data #sound_data: INCLUDE "matlab\output.bas" data $0000 end_file: ASM ORG $A000