포스트

MML : 문법 분석과 간단한 동요 만들어보기

MML : 문법 분석과 간단한 동요 만들어보기

이전 글 MML : Music Macro Language에 이어서

이번엔 직접 문법을 다뤄보고 간단한 동요를 만드는 실습을 진행할 예정


🛠3. 직접 만들어보기

  • 현대 MML 문법은 BASIC 언어의 하위 언어로 시작되어 BASIC의 문법을 따름
  • PLAY 명령은 매개변수를 받아, 사운드 칩이 재생할 음의 문자열을 정의함
  • MML 코드는 간단한 텍스트 형식을 가지며, 문자와 숫자를 조합하여 연주될 음악 음표를 표현함

다양한 플랫폼이 존재하므로 약간씩 세부 문법의 차이가 있지만,

일반적으로 MML은 다음과 같은 규칙을 따른다

  1. cdefgab : 문자 c부터 g는 각각 음악의 음정에 해당하며, 해당 음을 연주함
  2. 샤프(♯)는 # 또는 +을, 플랫(♭)은 -를 덧붙여 표현함
  3. 음의 길이는 정수 숫자를 덧붙여 표현하며, 온음표를 기준으로 한 분수
    • c8은 C 8분음표, f+2 는 F# 2분음표를 의미함
  4. p, r : 쉼표를 의미함, IBM과 BASIC에서는 p를 사용했었음
  5. o 옥타브를 표현. 숫자와 함께 사용함
  6. >, < : 옥타브를 한단계 올리거나 내림
  7. l : 명시적으로 길이를 지정하지 않은 음표나 쉼표의 기본 길이 설정
    • l8 g a b g l16 g a b g : 4개의 8분음표에 이어 4개의 16분음표를 의미함
  8. v : 숫자와 함께 사용되어 악기의 볼륨을 사용함
  9. t : 숫자와 함께 사용되어, 템포를 분당 박자 수(Beats per minutes : BPM)로 설정

나비야 동요 만들어보기

Image

나비야라는 동요를 MML로 변환하면 다음과 같다

>gee2fdd2cdefggg2geeefdd2ceggeee2dddddef2eeeeefg2g2eefdd2ceggeee2
  • > : 옥타브 변환
  • gee2fdd2cdefggg2: 나비야 나비야 이리날아오거라
    • 여기서는 8분음표가 기본이므로 e2가 4분음표를 표현함
  • geeefdd2ceggeee2 : 노랑나비 흰나비 춤을추며 오너라
  • dddddef2eeeeefg2 : 봄바람도 꽃잎도 방긋방긋 웃으며
  • gee2fdd2ceggeee2 : 참새도 짹짹짹 노래하며 춤춘다

이런식으로 표현할 수 있다

화음(Chord)

위에 설명한 방식으로는 한번에 하나의 음만 표현할 수 있다

그렇다면 동시에 여러 음을 재생하는 화음은 어떻게 구현해야할까?

대부분의 MML에서는 멀티트랙 방식을 이용하여 동시에 다른 음을 재생함으로써 화음을 구현한다

1
MML@>gee2fdd2cdefggg2geeefdd2ceggeee2dddddef2eeeeefg2gee2fdd2ceggeee2,l1rr<gg2g2ggggg2g2gg2g2ggggg2g2,l1rr<cc2e2cfccf2f2fc2c2ccfcc2c2;

다음 문법을 풀어보면 다음과 같다

  • MML@>{track1},{track2},{track3}; : 각 트랙을 구분하는 MML
  • ee2fdd2cdefggg2geeefdd2ceggeee2dddddef2eeeeefg2gee2fdd2ceggeee2 : 위 트랙과 같음. 메인 멜로디
  • l1rr<gg2g2ggggg2g2gg2g2ggggg2g2 : 트랙 2
    • l1 : 기본 음 길이를 전체음표로 지정함
    • rr : 2박 쉼표
    • < 한 옥타브 내리기
    • gg2g2ggggg2g2gg2g2ggggg2g2 : 박자에 맞춰서 G 음을 반복함
  • l1rr<cc2e2cfccf2f2fc2c2ccfcc2c2 : 트랙 3
    • 마찬가지로 l1rr<로 기본 길이와 쉼표, 옥타브 하향
    • cc2e2cfccf2f2fc2c2ccfcc2c2 : 코드 전개와 반복을 구현

이런식으로 하나의 멜로디와 화음을 각 트랙으로 구현할 수 있다

트랙별로 따로 작성하므로, 싱크를 맞추기가 매우 어렵고, 타이밍이 어긋나기 매우 쉬운 구조를 가지고 있다

다음엔 툴을 이용해 MIDI 파일을 MML로 변환하는 방법을 다뤄볼 예정

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.