MML : 문법 분석과 간단한 동요 만들어보기
MML : 문법 분석과 간단한 동요 만들어보기
이전 글 MML : Music Macro Language에 이어서
이번엔 직접 문법을 다뤄보고 간단한 동요를 만드는 실습을 진행할 예정
🛠3. 직접 만들어보기
- 현대 MML 문법은 BASIC 언어의 하위 언어로 시작되어 BASIC의 문법을 따름
PLAY
명령은 매개변수를 받아, 사운드 칩이 재생할 음의 문자열을 정의함- MML 코드는 간단한 텍스트 형식을 가지며, 문자와 숫자를 조합하여 연주될 음악 음표를 표현함
다양한 플랫폼이 존재하므로 약간씩 세부 문법의 차이가 있지만,
일반적으로 MML은 다음과 같은 규칙을 따른다
cdefgab
: 문자 c부터 g는 각각 음악의 음정에 해당하며, 해당 음을 연주함- 샤프(♯)는
#
또는+
을, 플랫(♭)은-
를 덧붙여 표현함 - 음의 길이는 정수 숫자를 덧붙여 표현하며, 온음표를 기준으로 한 분수
c8
은 C 8분음표,f+2
는 F# 2분음표를 의미함
p
,r
: 쉼표를 의미함, IBM과 BASIC에서는p
를 사용했었음o
옥타브를 표현. 숫자와 함께 사용함>, <
: 옥타브를 한단계 올리거나 내림l
: 명시적으로 길이를 지정하지 않은 음표나 쉼표의 기본 길이 설정l8 g a b g l16 g a b g
: 4개의 8분음표에 이어 4개의 16분음표를 의미함
v
: 숫자와 함께 사용되어 악기의 볼륨을 사용함t
: 숫자와 함께 사용되어, 템포를 분당 박자 수(Beats per minutes : BPM)로 설정
나비야 동요 만들어보기
나비야라는 동요를 MML로 변환하면 다음과 같다
>gee2fdd2cdefggg2geeefdd2ceggeee2dddddef2eeeeefg2g2eefdd2ceggeee2
>
: 옥타브 변환gee2fdd2cdefggg2
: 나비야 나비야 이리날아오거라- 여기서는 8분음표가 기본이므로
e2
가 4분음표를 표현함
- 여기서는 8분음표가 기본이므로
geeefdd2ceggeee2
: 노랑나비 흰나비 춤을추며 오너라dddddef2eeeeefg2
: 봄바람도 꽃잎도 방긋방긋 웃으며gee2fdd2ceggeee2
: 참새도 짹짹짹 노래하며 춤춘다
이런식으로 표현할 수 있다
화음(Chord)
위에 설명한 방식으로는 한번에 하나의 음만 표현할 수 있다
그렇다면 동시에 여러 음을 재생하는 화음은 어떻게 구현해야할까?
대부분의 MML에서는 멀티트랙 방식을 이용하여 동시에 다른 음을 재생함으로써 화음을 구현한다
1
MML@>gee2fdd2cdefggg2geeefdd2ceggeee2dddddef2eeeeefg2gee2fdd2ceggeee2,l1rr<gg2g2ggggg2g2gg2g2ggggg2g2,l1rr<cc2e2cfccf2f2fc2c2ccfcc2c2;
다음 문법을 풀어보면 다음과 같다
MML@>{track1},{track2},{track3};
: 각 트랙을 구분하는 MMLee2fdd2cdefggg2geeefdd2ceggeee2dddddef2eeeeefg2gee2fdd2ceggeee2
: 위 트랙과 같음. 메인 멜로디l1rr<gg2g2ggggg2g2gg2g2ggggg2g2
: 트랙 2l1
: 기본 음 길이를 전체음표로 지정함rr
: 2박 쉼표<
한 옥타브 내리기gg2g2ggggg2g2gg2g2ggggg2g2
: 박자에 맞춰서 G 음을 반복함
l1rr<cc2e2cfccf2f2fc2c2ccfcc2c2
: 트랙 3- 마찬가지로
l1rr<
로 기본 길이와 쉼표, 옥타브 하향 cc2e2cfccf2f2fc2c2ccfcc2c2
: 코드 전개와 반복을 구현
- 마찬가지로
이런식으로 하나의 멜로디와 화음을 각 트랙으로 구현할 수 있다
트랙별로 따로 작성하므로, 싱크를 맞추기가 매우 어렵고, 타이밍이 어긋나기 매우 쉬운 구조를 가지고 있다
다음엔 툴을 이용해 MIDI 파일을 MML로 변환하는 방법을 다뤄볼 예정
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.