*vfp ²©ö¸Á»ï¾¹µ¼ÖµoÁn, garfield
 
DECLARE Sleep IN kernel32 INTEGER dwMilliseconds 
 
DECLARE INTEGER Beep IN kernel32 INTEGER dwFreq, INTEGER dwDur 
 
 
*!*   //         Octave0   Octave1   Octave2   Octave3   Octave4   Octave5 
 
*!*   // A       55.000    110.000   220.000   440.000   880.000   1760.000 
 
*!*   // A#/Bb   58.270    116.541   233.082   466.164   932.328   1864.655 
 
*!*   // B       61.735    123.471   246.942   493.883   987.767   1975.533 
 
*!*   // C       65.406    130.813   261.626   523.251   1046.502  2093.005 
 
*!*   // C#/Db   69.296    138.591   277.183   554.365   1108.731  2217.461 
 
*!*   // D       73.416    146.832   293.665   587.330   1174.659  2349.318 
 
*!*   // D#/Eb   77.782    155.563   311.127   622.254   1244.508  2489.016 
 
*!*   // E       82.407    164.814   329.628   659.255   1318.510  2637.020 
 
*!*   // F       87.307    174.614   349.228   698.456   1396.913  2793.826 
 
*!*   // F#/Gb   92.499    184.997   369.994   739.989   1479.978  2959.955 
 
*!*   // G       97.999    195.998   391.995   783.991   1567.982  3135.963 
 
*!*   // G#/Ab   103.826   207.652   415.305   830.609   1661.219  3322.438 
 
LOCAL mstr, mfreq[12*6], mpos
 
mstr ='55,110,220,440,880,1760'
 
mstr=mstr+',58,117,233,466,932,1865'
 
mstr=mstr+',62,123,247,494,988,1976'
 
mstr=mstr+',65,131,262,523,1047,2093'
 
mstr=mstr+',69,139,277,554,1109,2217'
 
mstr=mstr+',73,147,294,587,1175,2349'
 
mstr=mstr+',78,156,311,622,1245,2489'
 
mstr=mstr+',82,165,330,659,1319,2637'
 
mstr=mstr+',87,1745,349,698,1397,2794'
 
mstr=mstr+',92,185,370,740,1480,2960'
 
mstr=mstr+',98,196,392,784,1568,3136'
 
mstr=mstr+',104,208,415,831,1661,3322'
 
 
ALINES(mfreq,mstr,',')
 
FOR mpos = 1 TO ALEN(mfreq,1)
 
   mfreq[mpos]=VAL(mfreq[mpos])
 
NEXT
 
DIMENSION mfreq[12,6]
 
 
LOCAL music , am[1] 
 
music='5,3,3,0,4,2,2,0,1,2,3,4,5,5,5'
 
ALINES( am , music,',')
 
FOR mpos = 1 TO ALEN(am,1)
 
   am[mpos]=VAL(am[mpos])
 
NEXT
 
 
private moctave , mlen , mskip
 
moctave = 3
 
mlen=160
 
mskip = 20
 
FOR mpos = 1 TO ALEN(am,1)
 
   DO case
 
   CASE am[mpos]=0
 
      sleep( mlen*3 + mskip )
 
   CASE am[mpos]=1
 
      BeepFreq( mfreq[ 4, moctave ] , mlen )
 
   CASE am[mpos]=2
 
      BeepFreq( mfreq[ 6, moctave ] , mlen )
 
   CASE am[mpos]=3
 
      BeepFreq( mfreq[ 8, moctave ] , mlen )
 
   CASE am[mpos]=4
 
      BeepFreq( mfreq[ 9, moctave ] , mlen )
 
   CASE am[mpos]=5
 
      BeepFreq( mfreq[11, moctave ] , mlen )
 
   CASE am[mpos]=6
 
      BeepFreq( mfreq[ 1, moctave+1 ] , mlen )
 
   other      &&--CASE am[mpos]=7
 
      BeepFreq( mfreq[ 3, moctave+1 ] , mlen )
 
   endcase
 
next
 
 
 
PROCEDURE BeepFreq (lnFreq , mlen) 
 
= Beep(lnFreq, mlen) 
 
= Sleep (mskip)
 
 
RETURN
 
 |