\ gm_patch \ \ patch (or "preset") class for General MIDI devices. \ \ Code: Han-earl Park \ Copyright 2000 Buster & Friends C-ALTO Labs \ (Valencia, July 1999 - \ \ MOD: HeP 07/25/99 Started project. \ MOD: HeP 08/29/99 put.range: methods no longer reports an error if offset \ is set outside MIDI note# range since there may be a \ legitimate reason for doing this. \ MOD: HeP 11/19/99 Add the STUFF{ ... }STUFF: method. \ MOD: HeP 02/24/00 Use object name if iv-gmpt-title is unassigned. Only when \ object name is unassigned is "Untitled" returned. include? task-gm_instrument myt:gm_instrument anew task-gm_patch :class OB.GM.PATCH iv-gmpt-preset# 00 iv=> iv-gmpt-title 60 iv=> iv-gmpt-note-offset \ middle C 36 iv=> iv-gmpt-note-lo \ lowest key on a 5 octave keyboard 97 iv=> iv-gmpt-note-hi \ lowest key + 5 octaves and 1 semitone ;m :m PUT.PRESET: ( preset# -- ) dup 0 128 within? IF iv=> iv-gmpt-preset# ELSE " put.preset:" " preset should be between 1 and 128, or 0 for 'null' presets" er_warning ob.report.error drop THEN ;m :m GET.PRESET: ( -- preset# ) iv-gmpt-preset# ;m :m PUT.TITLE: ( $title -- , set the preset's name ) iv=> iv-gmpt-title ;m :m GET.TITLE: ( -- $title ) iv-gmpt-title ?dup NOT IF get.name: self ?dup NOT IF " Untitled" THEN THEN ;m :m PUT.OFFSET: ( note# -- ) iv=> iv-gmpt-note-offset ;m :m GET.OFFSET: ( -- note# ) iv-gmpt-note-offset ;m :m PUT.NOTE.RANGE: ( lo hi -- ) 2dup < NOT IF " put.note.range:" " upper range limit is not greater than lower limit" er_warning ob.report.error THEN \ over 0 127 within? NOT IF " put.note.range:" " lower range is outside MIDI note number range of 0 and 127" er_warning ob.report.error THEN dup 0 127 within? NOT IF " put.note.range:" " upper range is outside MIDI note number range of 0 and 127" er_warning ob.report.error THEN \ iv=> iv-gmpt-note-hi iv=> iv-gmpt-note-lo ;m :m GET.NOTE.RANGE: ( -- lo hi ) iv-gmpt-note-lo iv-gmpt-note-hi ;m :m PUT.BEND.RANGE: ( n -- ) dup 0 24 within? NOT IF " put.bend.range:" " pitch bend has been set outside the 0 to 24 semitone range" er_warning ob.report.error THEN iv=> iv-gmpt-bend-range ;m :m GET.BEND.RANGE: ( -- n ) iv-gmpt-bend-range ;m :m PRINT: ( -- ) cr name: self cr ." Title = " get.title: self $. cr ." Preset# = " iv-gmpt-preset# 3 .r cr ." Note range:" cr space ." Offset = " iv-gmpt-note-offset 3 .r cr space ." Low = " iv-gmpt-note-lo 3 .r cr space ." High = " iv-gmpt-note-hi 3 .r cr ." Bend range = " iv-gmpt-bend-range 3 .r cr ;m :m }STUFF: ( name preset# offset lo hi bend -- ) stuff.depth 6 = IF put.bend.range: self put.note.range: self put.offset: self put.preset: self put.title: self ELSE " }stuff:" " wrong number of parameters (should be 6) passed" er_return ob.report.error THEN ;m ;class