{ ==================================================================== mmplay_delay.f (C) Copyright 1972-1998 FORTH, Inc. Copyright (C) 2001 FORTH, Inc.
Rick VanNorman rvn@forth.com (C) 18-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 : make ; \ 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 ; : sound.chime sound.active ; : play.chime play.active ; : loop.chime loop.active ; : start.chime start.active ; : stop.chime stop.active ; : loop.sound loop.active ; : stop.sound stop.active ; create wave_name 256 allot \ temp buffer \ : create_chime application definitions >IN @ \ does not parse leading spaces \ source drop tib = if 0 else 1 then + \ create >IN @ over - over source drop + over ,FILE drop drop ; : create_chime application definitions create here body> >name count ,FILE ; : make_chime create_chime ; : make_sound create_chime ; : set_sound create_chime ; : set_chime create_chime ; : create_wave create_chime ; : create_sound create_chime ; : import_sound create_chime ; : load_sound create_chime ; : new_chime create_chime ; : new_sound create_chime ; : new_wave create_chime ; : active? active_sound @ body> >name count type ." is active. " cr ; : chime? active? ; : sound? active? ; : .active active? ; : .chime active? ; : .sound active? ; : dir dir ; : wav? S" dir *.wav" evaluate ; : .wav wav? ; : files? wav? ; : sounds? wav? ; : .files wav? ; : .sounds wav? ; : \ postpone \ ; immediate