| 
 | 
楼主
 
 
 楼主 |
发表于 2003-9-12 13:56:24
|
只看该作者
 
 
 
SAS也能编出乐曲程序
[code:13e31]data holidays;  
retain fmtname '@$holiday';  
length data $3;  
ratio = 1.05946309436;  
str1 ='A A#B C C#D D#E F F#G G#';  
str2='A BbCbB#DbD EbFbE#GbG Ab';  
o = 1;  
do i = 0 to 87;  
  p = 55 * ratio**i;  
      data = compress(substr(str1,mod(i,12)*2+1,2)||o);  
  output;  
      if data^=compress(substr(str2,mod(i,12)*2+1,2)||o) then do;  
        data = compress(substr(str2,mod(i,12)*2+1,2)||o);  
        output;  
      end;  
      if mod(i,12)=2 then o=o+1;  
end;  
rename data=start p=label;  
keep fmtname data p;  
run;  
 
proc format cntlin=holidays; run;  
 
%macro play(input);  
data _Null_;  
%let i=1;  
%do %while(%scan(&input,&i,%str( ))^=);  
  %let note = %scan(&input,&i,%str( ));  
      %let pitch = %upcase(%scan(&note,1,=));  
      %let duration = %scan(&note,2,=);  
  %let i = %eval(&i+1);  
      %if &pitch=R %then  
        rc=sleep((1/&duration)*0.750);  
      %else  
        call sound(input("&pitch",$holiday.),(1/&duration)*300);  
  ;  
%end;  
run;  
%mend;  
 
%play(%str(  
C6=1 B5=1.5 A5=6 G5=1 R=2 F5=2 E5=1 D5=1 C5=1  
R=2 G5=2 A5=1 R=2 A5=2 B5=1 R=2 B5=2 C6=.33  
C6=2 C6=2 B5=2 A5=2 G5=2 G5=1.5 F5=4 E5=2  
C6=2 C6=2 B5=2 A5=2 G5=2 G5=1.5 F5=4 E5=2 E5=2  
E5=2 E5=2 E5=2 E5=4 F5=4 G5=1 R=4 F5=4 E5=4  
D5=2 D5=2 D5=2 D5=4 E5=4 F5=1 R=4 E5=4 D5=4  
C5=2 C6=1 A5=2 G5=1.5 F5=6 E5=2 F5=2 E5=1 D5=1 C5=1  
));[/code:13e31] |   
 
 
 
 |