Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- trying to write a sine wave to slot 0 and play it through SFX 8.
- sfx_memory = 0x3200
- pi = 3.1416
- sfx_id = 8 -- triggered by z key
- pitch = 24
- custom_slot = 0 -- custom waveform location
- volume = 3
- effect = 0
- custom_bit = 0x8000 -- indicates there is a custom waveform
- -- write one step
- function poke_step(sfx_id, step, pitch, custom_slot, volume, effect, custom_bit)
- -- 0-5 pitch, 6-8 custom_slot, 9-11 volume, 12-14 effect, 15 custom_bit
- pitch = pitch & 0x3f
- custom_slot = custom_slot & 0x07
- volume = volume & 0x07
- effect = effect & 0x07
- local value = 0
- value = value | pitch
- value = value | (custom_slot << 6)
- value = value | (volume << 9)
- value = value | (effect << 12)
- value = value | custom_bit
- -- address of the step
- local addr = 0x3200 + sfx_id * 68 + step * 2
- -- little-endian
- poke(addr, value & 0xff)
- poke(addr+1, (value >> 8) & 0xff)
- end
- function _init()
- -- write samples to custom waveform slot 0
- for i = 0, 63 do
- local angle = (i / 64) * 2 * pi
- local sample = flr(128 + 127.5 * sin(angle))
- poke(sfx_memory + i, sample)
- end
- -- populate step 0 of sfx 8
- poke_step(sfx_id, 0, pitch, custom_slot, volume, effect, custom_bit)
- -- zero remaining 31 steps
- for step=1,31 do
- local addr = 0x3200 + sfx_id*68 + step*2
- poke(addr, 0)
- poke(addr+1, 0)
- end
- -- Last 4 bytes of slot: filters, speed, loop start and stop
- poke(0x3200 + sfx_id*68 + 64, 0)
- poke(0x3200 + sfx_id*68 + 65, 0)
- poke(0x3200 + sfx_id*68 + 66, 0)
- poke(0x3200 + sfx_id*68 + 67, 0)
- end
- function _update()
- if btnp(4) then
- sfx(sfx_id)
- end
- end
- function _draw()
- cls()
- print("press z", 10, 10, 7)
- end
Advertisement
Add Comment
Please, Sign In to add comment