! Mouse-operated organ with variable vibrato. 
!
SET mode "graphics"               ! Use full screen
SET back "red"
CLEAR
OPEN #1: screen .04,.96,.25,.75
SET color mix (1) 1,1,1           ! Color 1 = white
SET color mix (2) 0,0,0           ! Color 2 is black

BOX AREA 0,1,0,1                  ! Keyboard area
SET color 2                       ! Switch to black
BOX LINES 0,1,0,1                 ! Frame keyboard
SET window -.5,35.5,-30,30        ! 35 tones

DIM freq(-2:38)                   ! Frequency table
FOR i = -2 to 38                  ! Fill in a scale
    LET freq(i) = 300 * 2^(i/12)
NEXT i

FOR i = 0 to 36                   ! Draw each key
    SELECT CASE mod(i,12)         ! Branch on note
    CASE 1,3,6,8,10               ! Black keys
         BOX AREA i-.5,i+.5,-3,30
         PLOT i,0;i,-30
    CASE 0,5                      ! C and F
         PLOT i-.5,-30;i-.5,30
    CASE else                     ! Other keys
    END SELECT
NEXT i

DO                                ! Main loop
   GET MOUSE exactx,y,state       ! Get key location
   LET x = round(exactx)
   LET n = mod(x,12)
   IF y<-3 and (n=1 or n=3 or n=6 or n=8 or n=10) then
      IF x-exactx<0 then LET x = x+1 else LET x = x-1
   END IF
   IF y <= 0 then LET y = 0       ! No vibrato on key tips
   IF vib < 0 then LET vib = y else LET vib = -y
   IF state = 1 or state = 2 then
      SOUND freq(x)+vib,4/60      ! Mouse down, play note
   ELSE
      SOUND 0,4/60                ! Mouse up, play silence
   END IF
LOOP

END
