SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3501|回复: 13
打印 上一主题 下一主题

SAS也能编出乐曲程序

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 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]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2003-9-13 11:11:27 | 只看该作者

Congatulations

<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2003-9-15 17:47:50 | 只看该作者

我也来捧场了啊!

<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->

这里的sas论坛分类真全啊,以后可以学习多多啊!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2003-9-28 23:52:23 | 只看该作者

^_^

真好听,厉害!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2003-10-2 23:39:51 | 只看该作者

funny

<!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2003-10-12 20:52:42 | 只看该作者
只听说过sas做动画,还没有看过变乐曲的呢.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2003-10-13 13:18:13 | 只看该作者
连这个都行,真的佩服。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2003-10-13 14:10:53 | 只看该作者
其实这只是很简单的一个功能。
连最早的汇编语言、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!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2003-10-26 15:02:08 | 只看该作者
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2003-12-15 22:21:23 | 只看该作者

佩服

小弟初学SAS,请各位大侠多多赐教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-6 11:06 , Processed in 0.098093 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表