마인크래프트 작곡 툴을 만들 수 있을까?

Posted on

최근 몇 달 동안에 대학 과제와 정신적인 문제로 인하여 활동을 하지 못했습니다. 대학 과제로 인한 스트레스 때문이었는지, 과제를 전부 끝내고 나서 제가 좋아하던 활동들 모두 손을 놓고 싶어지는 느낌이 들었습니다. 작곡, 블로그 포스팅, 프로그래밍, 아두이노 프로젝트… 전부 말이죠. 과제 때문에 지친 것인가 싶어 활력을 되찾아보고자 저의 유년시절을 함께했던 게임인 마인크래프트를 오랜만에 실행해보았습니다. 초등학생 때부터 하다가 어느 순간부터 손을 놓게 된 게임을 오랜만에 들어가보니 정말 많은 것들이 달라졌다는 느낌이 강하게 들었습니다. 그렇게 새로 생긴 블록들과 몹들을 가지고 놀면서 시간을 보내던 중, 문득 이런 생각이 들었습니다. “혹시 마인크래프트 블럭들을 사용해서 노래를 만들 수 있는 환경을 만들어볼 수는 있지 않을까?”

준비 과정

YouTube에 검색해보면 많은 플레이어들이 마인크래프트 게임 내 환경에서 레드스톤과 노트블럭, 중계기 등을 사용하여 어떠한 노래를 연주하는 영상들을 쉽게 접해볼 수 있습니다. 노트블럭 연주는 각 블럭들의 특성을 잘 이해하고 어느 정도 이상의 음감과 끈기를 가시진 분이라면 한 번쯤은 시도해볼 수 있다고 할 수 있을 정도로 어렵지는 않지만 어느 정도 시간이 요구되는 작업입니다.

이러한 작업을 하시는 분들의 영상을 보면 대부분의 경우 어느 멜로디를 구현해내는 데에 있어 꼭 필요한 블록만을 사용하여 회로를 설계하고 영상을 촬영하여 맵의 사이즈가 작고 메모리를 비교적 덜 차지합니다. 하지만 이러한 방법을 사용할 경우 한 번 만든 소리 배열을 다시 수정하기가 어렵고 한 번에 다 다양한 소리를 가지고 실험해보기가 어렵다는 문제점이 있습니다. 때문에 YouTube에 있는 영상의 경우 상당수가 자작곡이 아닌 타인이 만든 노래를 다시 끌어와서 연주하는 영상, 즉 “커버 영상”이 대부분입니다.

일반적으로 컴퓨터를 사용하여 작곡을 할 경우 디지털 오디오 워크스테이션(DAW) 이라고 불리는 종류의 시스템을 사용합니다. Ableton Live, FL Studio, Cubase, Studio One, Logic Pro 등의 소프트웨어가 이러한 시스템에 해당됩니다. 이러한 프로그램들의 역할은 가상의 악기나 녹음된 오디오 파일 등을 사용하여 사용자가 보다 편리하게 작곡을 좀 더 실험적으로 할 수 있도록 도와주는 것입니다. 제가 마인크래프트로 구현해보고자 하는것이 바로 이것, ‘마인크래프트에서 보다 쉽게 작곡을 할 수 있는 방법 제작” 입니다. 이를 구현해내기 위해서 이해하고 있어야 할 사항들은 다음과 같습니다:

마인크래프트 노트블럭

Note block, 한국어로는 소리 블럭이라고 이름이 붙은 이 블럭은 레드스톤을 통해 신호를 받으면 설정값에 따라 소리를 낼 수 있는 블럭입니다. 노트블럭 하나가 낼 수 있는 소리의 음역대는 파#에서 다다음 옥타브 파#까지입니다.

이미지 출처: GamePedia

노트블럭이 레드스톤 신호를 받을 시 노트블럭 위에 아무런 블럭도 존재하지 않을 때 소리가 재생되며, 재생되는 소리는 노트블럭 아래에 있는 블록의 종류에 따라 바뀌게 됩니다.

현재 마인크래프트에는 총 16가지 종류의 노트블럭 소리가 있습니다. 이 소리들을 잘 조합하면 노래를 만드는 데에 있어서 중요한 요소 중 하나인 “화음”을 맞출 수 있습니다.

마인크래프트 레드스톤 신호 전달

신호 전달 등의 용도로 사용되는 재료인 레드스톤의 작동 방식은 현실에서의 직류 전기와 몇 가지 공통점을 공유하고 있습니다. 신호가 한 방향으로 전달된다는 점과 교류 전기와는 달리 신호를 한 번에 보낼 수 있는 거리가 그리 멀지 않다는 점이죠. 레드스톤 가루만 사용할 경우 레드스톤 신호를 공급원으로부터 13블록 정도 떨어져있는 거리까지 전달할 수 있으며 그 이상으로 멀리 나가고자 할 경우 레드스톤 중계기(Redstone relay)라고 하는 블럭을 사용하여 다시 신호의 세기를 조정해주어야 합니다.

레드스톤 중계기의 역할은 이름에서 알 수 있듯이 레드스톤 신호의 내용(True/False)을 받아서 다시 한 번 강하게 내보내는 것입니다. 단순히 레드스톤 가루만을 사용했을 때와 다르게 신호를 처음 설계했을 때의 반대 방향으로 가는 것을 허용하지 않아 레드스톤 엔지니어링을 할 때 다이오드처럼 사용되기도 합니다.

레드스톤 중계기를 통해 신호를 증폭시킨 후 다른 곳으로 신호를 전달할 시 바뀐 신호 값을 적용하여 반환 하는 데에 일정 시간이 소모됩니다. 이러한 신호 지연 시간은 레드스톤 중계기 설정 값을 바꾸거나 중계기를 여럿 설치하여 원하는 만큼 늘릴 수 있습니다. 이러한 점을 이용할 시 레드스톤 중계기를 사용하여 타이머나 캐패시터 같은 것을 만들 수 있습니다.

이외에도 입력 및 출력 포트가 아닌 다른 곳에 신호를 공급해서 입력 값이 변경되어도 출력 값이 변하지 않게 하거나 레드스톤 횃불과 같이 사용하여 로직 게이트를 만들 수도 있습니다. 이번 프로젝트는 논리 회로를 사용하지 않을 것이므로 관련 설명은 생략합니다. 이에 대한 내용은 추후에 기회가 되면 설명하도록 하겠습니다.

MIDI 용어: Voice

전자 악기를 다룰 때 말하는 보이스(voice)란 악기 하나가 동시에 재생할 수 있는 노트(계이름)의 수를 뜻합니다. 전자 악기로 코드(Chord, 화음)를 짜려고 할 때 노트를 입력받은 악기의 voice 수가 충분하지 않을 경우 소리 출력에 문제가 생기게 됩니다.

마인크래프트 소리 블럭을 전자 악기의 개념으로 볼 경우, 소리 블록은 신호를 받을 시 설정된 노트 하나를 재생할 수 있으므로 1 보이스 짜리 전자악기라고 할 수 있습니다. 만약 소리 노트로 만든 악기의 보이스 수를 늘리고자 한다면 방법은 간단합니다. 같은 종류의 다른 노트를 연주하는 소리 블럭 두 개에 신호를 동시에 주면 되는 것이죠.

프로젝트 설계

악기 종류 및 보이스

마인크래프트 소리 블럭으로 낼 수 있는 소리 16가지 중에서 4가지는 드럼 관련 소리입니다. Kick, Snare, HiHat과 Cowbell 소리가 이런 종류에 해당합니다. 실제 DAW로 작곡하는 것과 달리 마인크래프트 작곡의 경우 드럼 샘플링이 다양하지가 않아 여러 노트를 동시에 재생할 일이 없을 것이라고 판단하여 이 악기들은 회로 부피 축소를 위해 각각 1 보이스씩만 할당하기로 결정했습니다.

베이스 소리의 경우 전자음악을 만들 때 자주 이용하는 Sub 베이스 느낌의 소리는 마인크래프트에 구현되어 있지 않으며 묵직한 느낌의 소리 블럭 소리는 베이스 스트링 소리와 Didgeridoo(호주 원주민의 나무로 만든 관악기) 소리 정도입니다. 베이스 소리의 경우 다른 코드의 노트를 동시에 재생하는 경우가 거의 없어 처음에는 1보이스만 할당하려 했으나 간혹 그러한 시도를 하는 사람이 있어 혹시나 하는 차원에서 2보이스를 할당했습니다.

얼음 위에 노트 블럭을 놓고서 신호를 보내면 나는 소리는 사용할 일이 없을 것 같아서 이번 프로젝트에 사용하지 않기로 결정했습니다. 뼈 블록 위에 노트블럭을 올려두고 내는 소리 또한 철 블록 위의 노트블럭 소리와 비슷하다는 이유로 사용하지 않기로 했습니다. 일반적으로 화음을 만들 때는 4개의 노트를 동시에 재생하기 때문에 4 보이스 혹은 그 이상을 할당해주는 것이 일반적인 경우에는 맞다고 할 수 있으나 마인크래프트 소리 블럭의 음역대 제한, 플레이어의 가청 거리 등을 고려하여 3보이스씩만 할당하였습니다.

노트 길이

박자를 맞추라고 할 때 일반인의 경우 4분의 4박자로 맞추는 경우가 대부분이지만 작곡가의 경우 노래가 지루해지는 것을 막기 위해 박자나 멜로디에 약간의 변형을 주고는 합니다. 때문에 박자를 맞추는 악기를 만들 때 단위를 잘게 자를 수 있도록 해줄 경우 그렇지 않은 경우보다 더 다양한 결과물을 만들어낼 수 있는 가능성을 주게 됩니다. 레드스톤 중계기가 가지고 있는 신호 전달 속도의 한계로 인하여 가장 짧은 노트는 기술적으로 가장 짧게 나온 1/16로 정해졌습니다.

구동 방식 및 인터페이스

전반적인 느낌은 오르골이나 일반적인 악보를 읽을 때의 느낌과 비슷합니다. 노트는 한 방향으로 길게 나열되어있고, 레드스톤 회로를 가동시키면 배치된 노트가 순차적으로 재생되도록 하는 방식으로 제작할 예정입니다.

레드스톤 중계기를 직렬로 연결하는 방법을 사용하여 레드스톤 활성화가 되는 구역이 서서히 바뀌도록 할 것입니다. 왼쪽부터 악기를 나열할 것이며, 맨 오른쪽에는 글씨를 띄우는 등 특수 명령어를 실행하기 위한 커맨드 공간을 배치할 것입니다.

사용자가 악보를 새로 만들거나 수정하고 싶을 경우 원하는 위치에 직접 소리 블럭을 배치하도록 하는 방향으로 만들 예정입니다. 사용자가 위치 파악을 쉽게 하도록 하기 위해 위치별 표시를 진행할 것입니다. 노래 재생 시 플레이어의 가청 거리 문제로 인하여 플레이어가 레드스톤 활성화 구역을 따라 움직여야 하는데, 이 때 사용자는 자동으로 이동하는 방법과 자신이 직접 얼음 위에서 보트를 타며 빠르게 움직이면서 노래를 듣는 방법 2가지 중 하나를 선택할 수 있도록 할 것입니다.

결과물

완성본 모습

만약 월드에딧 같은 건축 툴을 사용하였더라면 건축 과정이 매우 간편했을 것이나, 추가적인 툴을 사용할 수 있는 환경을 만들지 못하여 블록을 하나씩 배치하는 방향으로 지을 수밖에 없었습니다. 4 bar 정도 길이의 소리를 재생할 수 있게끔 만드는 데에 꼬박 3일이 걸려 시간 상의 문제로 이 쯤에서 프로젝트를 중단하기로 결정했습니다.

마무리된 결과물 세이브파일은 여기에서 확인하실 수 있습니다. 만약 월드에딧을 사용하실 수 있으신 분이 계신다면 //stack 커맨드로 16bar나 32bar 정도로 길이를 늘려 재배포 하신다면 저도 받아서 잘 쓰도록 하겠습니다. (?)

사용법

현재 배포중인 세이브파일은 Java버전용 세이브파일입니다. 다운로드 링크를 통해 zip 파일을 받으신 후 안에 있는 폴더를 마인크래프트 세이브파일 폴더로 옮겨주시면 준비는 끝입니다. 만약 윈도우에서 Java버전을 실행하시고 계신다면 세이브파일 경로는 기본적으로 C:\Users\(사용자 이름)\AppData\Roaming\.minecraft\saves 으로 잡혀있을 것입니다.

맵을 처음 실행할 경우 스폰 지점이 철 블록들로 만들어진 방으로 되어있을 것입니다. 만약 다른 곳에서 스폰되셨을 경우 노래 재생 장치 위쪽에 있는 금으로 된 부분이나 다른 장소에 있는 “설정 창으로 이동”이라고 적혀있는 표지판 근처에 있는 커맨드 블럭에 달려있는 버튼을 누르시면 이 방으로 이동하시게 됩니다.

앞쪽에는 연쇄형 커맨드 블록 1개와 스위치 1개, 뒤에는 반응형 커맨드 블록 3개가 위치해 있습니다. 연쇄형 커맨드 블록에는 사용자 이펙트(사용자에게서 나타나는 특수효과, 기본 설정은 하트 생성) 설정값이 적혀있습니다. 옆에 있는 PlayTeleport On/Off 스위치는 노래 재생 시 자동으로 이동하는 것을 허용할지 묻는 스위치이므로 기호에 따라 설정값을 바꿔주시면 됩니다.

뒤에 있는 커맨드 블록 3개는 왼쪽에서부터 차례대로 노래 재생하는 장소로 이동하는 버튼, 메트로놈 실행 버튼, 사운드 라이브러리 확인 버튼입니다. 노래 재생 장치가 있는 곳으로 가시면 버튼 2개를 확인하실 수 있으실텐데, 악보가 있는 방향에 위치한 버튼은 음악 재생 버튼, 반대쪽의 커맨드 블록에 붙어있는 버튼이 옵션 창으로 돌아가는 버튼입니다. 악보를 새로 짜거나 수정하고자 하실 경우 노래 재생 장소로 이동하는 버튼을 누르신 뒤 블럭이 일렬로 나열되어있는 곳으로 가서 원하시는 곳에 소리 블럭을 배치해주시면 됩니다.

1/4 Bar가 끝나는 지점에는 아래쪽 발광석이 안내를 해주고, 1 bar가 끝나는 지점에는 위에 금 기둥이 같이 있습니다. 이러한 위치 안내 정보를 참고하며 악보를 만드신다면 나중에 길을 잃어버리실 위험은 없을 것이라 생각합니다.

장치 완성 후 확인 결과 빠르기는 약 149bpm 정도이며 안타깝게도 저의 레드스톤 관련 지식의 한계로 인하여 빠르기 조절은 힘들 것으로 보입니다.

노래 예시

결론

역시 마인크래프트 건축 시 큰 것들을 만들 때는 월드에딧 사용은 필수인가봅니다.

해당 맵의 수정 및 재배포를 허용합니다. 악보의 길이를 늘리거나 창의적이고 다양한 멜로디를 만들어서 주변 사람들과 공유하신다면 좋을 것 같습니다. 여러분 모두의 창작 활동을 응원합니다.

그래도 역시 작곡은 제대로 할 거면 그냥 DAW 하나 장만합시다.

각종 문의는 이메일 주소 producer.p@pseudoartist.com 으로 받습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다

7 − 4 =