MML(Music Macro Language) 간단 사용법:

cdefgab: 도레미파솔라시.
r: 쉼표
음표나 쉼표 뒤에 1을 쓰면 온음표, 2를 쓰면 2분음표, 8을 쓰면 8분음표, 16을 쓰면 16분음표.
.은 점음표, +는 샵 -는 플랫. 셋잇단 음표의 경우 4분음표 셋잇단음표: 6, 8분: 12, 16분: 24
& : 이음,붙임줄
l(엘)뒤에 숫자를 써서 기본박자를 설정할 수 있다. l8이라고 앞에 쓸 경우 박자를 안 쓴 것은 8분음표가 된다.
옥타브 높이기: > 낮추기: < 혹은 o 뒤에 숫자를 써서 조절 가능. ex) o4: 4옥타브
음색: 1. 악보 앞 v를 쓴 뒤 숫자.
2.%0@0 단파형(디폴트) %0@1 노이즈 %1@8 삼각파 %3@1도 괜찮은 음색.
템포(음악 속도): t 다음 숫자가 클수록 빠르다.
q: 음 길이 지정(스타카토, 레가토 등) q0, q8 등 기본은 q6
p: 음의 좌우 위치 설정(스테레오) p0, p8 등 기본은 p4
@p: 음의 좌우 위치 설정(스테레오) @p-64 ~ @p64 기본은 @p0
[]숫자: 숫자만큼 반복. ex) [cde]2 도레미도레미
|(백스페이스 옆): 한번은 일단 지나간 뒤 두번째 도착하면 종료. ex) [cd | e]2 도레미도레
// 한줄 주석
/* 여러줄 주석 */

ex)t150 o4cdefgabo5crco4bagfedc : 템포 150, 도 > 한옥타브 위 도, 쉼표, > 원래 도로.
t150 o4c2e8g8gag8gf8rc8cdd8e8f8gga8g8ba8o5c: 템포 150, 간단한 네마디 음악.
t100 l8 %3@1 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2: 템포 100, 기본 8분음표, 삼각파 , ABC송.


Flash CS4 + ActionScript 3.0으로 Sion065 라이브러리를 이용해 미디 파일, MML 코드를 불러와 각각 플레이 하기.
왼쪽 플레이 버튼 클릭시 미디 파일 플레이.
오른쪽 플레이 버튼 클릭시 입력 텍스트 창에 있는 MML 코드 플레이.

플래시 ActionScript 3.0의 미디 플레이 라이브러리인 Sion 0.65를 발견해 다운받아 풀고 플래시 CS4의 Edit-Preferences-ActionScripte의 Languages: ActionScript 3.0 Settings... 버튼을 클릭, Source path:에서 +버튼을 클릭하여 라이브러리를 푼 폴더를 추가시켜 설정을 완료.

몇 가지 미디 파일로 테스트해 본 결과 대개의 경우는 음질은 떨어지지만 제대로 재생된 반면 이펙트를 과하게 넣은 경우 실행 중 에러가 발생했다.

미디 보다 흥미로운 것은 MML(Music Macro Language)인데 음악 매크로 언어라는 명칭답게 간단하게 악보를 문장화할 수 있어 인상적이다.

15/4/28 화

Sion 공식홈: https://sites.google.com/site/sioncenter
MML 간단 사용법(일문): http://www.16dimensional.com/sion140/
MML Reference(영문):
http://mmltalks.appspot.com/document/siopm_mml_ref_05_e.html

위키피디아 Music Macro Language 항목(영문)
위키피디아 Music Macro Language 항목(일문) -이쪽 설명이 좀 더 자세.

화면에 'playButM', 'playButM2'란 이름의 버튼 모양 무비클립과 'inputText'란 이름의 입력 텍스트 창을 만들어 두다.
import org.si.sion.SiONDriver; //라이브러리 불러오기
import org.si.sion.midi.SMFData;

[Embed(source="BWV565.mid", mimeType="application/octet-stream")]
var Test:Class;

var smfData:SMFData = new SMFData();
var driver:SiONDriver = new SiONDriver();

var mmlData; //mml 내용 임시 저장용 변수

function init(){
	smfData.loadBytes(new Test); //미디파일 불러오기
	
	playButM.addEventListener(MouseEvent.CLICK,mClick);
	playButM2.addEventListener(MouseEvent.CLICK,mClick);
}
function mClick(e:MouseEvent){ //버튼들 마우스 클릭시 처리
	switch(e.target.name){ //눌려진 버튼 이름으로 분기
		case("playButM"):{
			//불러온 미디 파일 플레이하기
			driver.play(smfData);
			break;
		}
		case("playButM2"):{
			//입력창의 내용을 받아 플레이하기
			mmlData = String(inputText.text);
			driver.play(mmlData);
			//driver.play("t100 l8 [ccggaag4 ffeeddc4 | [ggffeed4]2 ]2");
			break;
		}
	}
}

init();