{ ==================================================================== mmplay_delay.f (C) Copyright 1972-1998 FORTH, Inc. Copyright (C) 2001 FORTH, Inc.
Rick VanNorman rvn@forth.com (C) 13-07-05 globalchimes at yahoo dot ca ==================================================================== } marker mmplay_delay : ,FILE ( addr n -- ) R/O OPEN-FILE THROW >R R@ FILE-SIZE THROW DROP ( n) DUP , HERE OVER ALLOT SWAP R@ READ-FILE THROW DROP R> CLOSE-FILE THROW ; LIBRARY WINMM.DLL 3 IMPORT: PlaySound : PLAY ( addr -- ) CELL+ 0 SND_MEMORY SND_ASYNC OR PlaySound DROP ; : StopSound 0 0 SND_MEMORY SND_ASYNC OR PlaySound DROP ; : LoopSound ( addr --- ) CELL+ 0 SND_MEMORY SND_ASYNC SND_LOOP OR OR PlaySound DROP ; 1 VALUE LOUD : SOUND ( addr -- ) LOUD IF PLAY ELSE DROP THEN ; variable active_sound CREATE CHIMEFOUR.WAV S" CHIMEFOUR.WAV" ,FILE \ 100% amplitude with some clipping : SOUND.CHIMEFOUR CHIMEFOUR.WAV SOUND ; : PLAY.CHIMEFOUR CHIMEFOUR.WAV SOUND ; CREATE CHIMEFOUR_80.WAV S" CHIMEFOUR_80.WAV" ,FILE \ 80% amplitude : SOUND.CHIMEFOUR_80 CHIMEFOUR_80.WAV SOUND ; : PLAY.CHIMEFOUR_80 CHIMEFOUR_80.WAV SOUND ; CREATE CHIMEFOUR_50.WAV S" CHIMEFOUR_50.WAV" ,FILE \ 50% amplitude : SOUND.CHIMEFOUR_50 CHIMEFOUR_50.WAV SOUND ; : PLAY.CHIMEFOUR_50 CHIMEFOUR_50.WAV SOUND ; CREATE CHIMEFOUR_50_INVERTED.WAV S" CHIMEFOUR_50_INVERTED.WAV" ,FILE \ 50% amplitude inverted : SOUND.CHIMEFOUR_50_INVERTED CHIMEFOUR_50_INVERTED.WAV SOUND ; : PLAY.CHIMEFOUR_50_INVERTED CHIMEFOUR_50_INVERTED.WAV SOUND ; CREATE OM4_5690.wav S" OM4_5690.wav" ,FILE \ 100% amplitude +-20000 44100 16 bit mono : SOUND.OM4_5690 OM4_5690.wav SOUND ; : PLAY.OM4_5690 OM4_5690.wav SOUND ; CREATE OM4_5690_inverted.wav S" OM4_5690_inverted.wav" ,FILE \ 100% amplitude +-20000 44100 16 bit mono : SOUND.OM4_5690_inverted OM4_5690_inverted.wav SOUND ; : PLAY.OM4_5690_inverted OM4_5690_inverted.wav SOUND ; : active ( addr --- ) active_sound ! ; : is ; \ noop OM4_5690.wav is active \ address pointer : sound.active active_sound @ sound ; : play.active active_sound @ sound ; : loop.active active_sound @ LoopSound ; : start.active active_sound @ sound ; : stop.active StopSound ; create wave_name 256 allot \ temp buffer