SAS中文论坛

标题: SAS也能编出乐曲程序 [打印本页]

作者: shiyiming    时间: 2003-9-12 13:56
标题: 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]
作者: shiyiming    时间: 2003-9-13 11:11
标题: Congatulations
<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
作者: shiyiming    时间: 2003-9-15 17:47
标题: 我也来捧场了啊!
<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->

这里的sas论坛分类真全啊,以后可以学习多多啊!
作者: shiyiming    时间: 2003-9-28 23:52
标题: ^_^
真好听,厉害!
作者: shiyiming    时间: 2003-10-2 23:39
标题: funny
<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
作者: shiyiming    时间: 2003-10-12 20:52
只听说过sas做动画,还没有看过变乐曲的呢.
作者: shiyiming    时间: 2003-10-13 13:18
连这个都行,真的佩服。
作者: shiyiming    时间: 2003-10-13 14:10
其实这只是很简单的一个功能。
连最早的汇编语言、basic语言都可以实现这样的功能。
其原理只是通过PC喇叭发出一定频率的声音,奏出乐曲,大家若掌握了sas/base的知识,都可以编出动听的乐曲。
试试下面这段代码:

data test;
input O3@@;
CALL SOUND(O3,300);
cards;
261 293 330 349 392 440 494
run;

主要是sound这个函数在起作用,而数据对应的是中音1~7的频率值(HZ),高音频率是2倍,低音是1/2,以此类推。

大家可以自己试一下!

Very simple &amp; intresting! Enjoy yourself!
作者: shiyiming    时间: 2003-10-26 15:02

作者: shiyiming    时间: 2003-12-15 22:21
标题: 佩服
小弟初学SAS,请各位大侠多多赐教
作者: shiyiming    时间: 2003-12-16 08:29
哈哈,有意思!
作者: shiyiming    时间: 2003-12-16 09:35
真厉害!
作者: shiyiming    时间: 2003-12-31 17:45
大哥

我佩服你!!!
作者: shiyiming    时间: 2012-3-27 10:16
标题: Re: SAS也能编出乐曲程序
高级啊,有意思啊




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2