화면에 'noteM'이란 이름의 음표 무비클립(무비클립 내에는 's'란 이름의
샵 모양 무비클립을 만들어 두었다) , 'toggleBtn'이란 이름의 정지/재생 토글 버튼 무비클립, 'debugTxt'란
이름의 다이나믹 텍스트를 만들어 두다.
var museNoteArr:Array=["c","c+","d","d+","e","f","f+","g","g+","a","a+","b"];//음계 배열
var museLengArr:Array=["2","4","4","8","8","8","8","8","8","16","16"];//음 길이 배열
var museTempArr:Array=new Array();
var rMuseTimer:Timer=new Timer(1000); //랜덤 음 발생 타이머(1초)
var stopMuse = false; //재생/정지 체크용 변수
function init(){
for(var k=0; k < 100; k++){ randMusicNoteCreate(); } //랜덤 음악 만들어
trace(museTempArr);
playMMLarr(museTempArr); //플레이.
//mmlInit(); //미디 음악 연주하기
toggleBtn.addEventListener(MouseEvent.CLICK, toggleClick);
rMuseTimer.addEventListener(TimerEvent.TIMER, rMusePlay);
rMuseTimer.start(); //랜덤 음 발생 타이머 시작
}
function rMusePlay(e:TimerEvent){
randMusicNotePlay(); //랜덤한 음 연주하기 함수 호출
}
function toggleClick(e:MouseEvent){ //플레이/정지 토글버튼 클릭시
if(stopMuse){ //멈춰 있는 중이면
rMuseTimer.start();
toggleBtn.gotoAndStop("stop");
stopMuse = false;
}else{ //플레이 중이면
rMuseTimer.stop();
toggleBtn.gotoAndStop("play");
stopMuse = true;
}
}
//************************************************************
// MML 관련 함수들
//************************************************************
import org.si.sion.SiONDriver; //라이브러리 불러오기
import org.si.sion.midi.SMFData;
//[Embed(source="ckipang6.mid", mimeType="application/octet-stream")]
//var Test:Class;
//var smfData:SMFData = new SMFData();
var driver:SiONDriver = new SiONDriver();
var mmlData, mml1, mml2, mml3; //mml 내용 임시 저장용 변수
var tune:String="%3@1"; //기본음색 지정용
var noteLength; //음 길이 저장용
function playMMLarr(arr:Array){ //배열에 저장된 음 연주하기
mml3 = "";
mml3 += "%3@200 ";
for(var i = 0; i < arr.length; i++){
mml3 += arr[i]+ ",";
}
driver.play(mml3); //만들어진 음 연주하기
}
function randMusicNotePlay(){//랜덤한 음 연주하기 함수
mml1 = Math.floor(Math.random()*museNoteArr.length);
mml2 = Math.floor(Math.random()*museLengArr.length);
mmlData = museNoteArr[mml1]+museLengArr[mml2];
//museTempArr.push(mmlData);
trace2(mmlData);
mmlData = "%3@200 "+mmlData;
//음표 길이, 모양 시각적으로 표현하기
noteLength = int(museLengArr[mml2]);
noteM.gotoAndStop(String(noteLength));
switch(museNoteArr[mml1]){
case("c"): noteM.y = debugTxt.y = 240; noteM.s.visible=false; break;
case("c+"): noteM.y = debugTxt.y = 240; noteM.s.visible=true; break;
case("d"): noteM.y = debugTxt.y = 225; noteM.s.visible=false; break;
case("d+"): noteM.y = debugTxt.y = 225; noteM.s.visible=true; break;
case("e"): noteM.y = debugTxt.y = 210; noteM.s.visible=false; break;
case("f"): noteM.y = debugTxt.y = 195; noteM.s.visible=false; break;
case("f+"): noteM.y = debugTxt.y = 195; noteM.s.visible=true; break;
case("g"): noteM.y = debugTxt.y = 180; noteM.s.visible=false; break;
case("g+"): noteM.y = debugTxt.y = 180; noteM.s.visible=true; break;
case("a"): noteM.y = debugTxt.y = 165; noteM.s.visible=false; break;
case("a+"): noteM.y = debugTxt.y = 165; noteM.s.visible=true; break;
case("b"): noteM.y = debugTxt.y = 150; noteM.s.visible=false; break;
}
//음표 길이에 맞춰 타이머 지연시간 변경
noteLength = 5000 / noteLength;
rMuseTimer.delay = noteLength; //타이머 지연시간 바꾸기*****
driver.play(mmlData); //만들어진 음 연주하기
}
function randMusicNoteCreate(){//랜덤한 음으로 배열 만들기
mml1 = Math.floor(Math.random()*museNoteArr.length);
mml2 = Math.floor(Math.random()*museLengArr.length);
mmlData = museNoteArr[mml1]+museLengArr[mml2];
museTempArr.push(mmlData);
}
//function mmlInit(){ //미디 파일 플레이.
// smfData.loadBytes(new Test); //미디파일 불러오기
// driver.play(smfData); //불러온 미디 파일 플레이하기
//}
//************************************************************
// 기타 도우미 함수들
//************************************************************
function trace2(a,b="",c='',d="",e="",f="",g=""){
trace(a,b,c,d,e,f,g);
//debugTxt.appendText(a+b+c+d+e+f+g+"\n");
debugTxt.text=a+b+c+d+e+f+g+"\n";
}
init();
|