이 그림은 무엇인가? Rhythm and blues 종류의 어떤 드럼 연주 패턴 2마디에 해당하는 MIDI 파일을 html-midi-player에서 시각화한 것이다.
이를 내가 고안한(이라고 말하기는 민망하지만...) Ardule Drum Pattern 체계, 즉 ADP로 전환한 다음 실제 연주와 관련한 이벤트만 바이트 어레이로 정리하면 86바이트에 해당하는 이런 모습이 된다.
0x41, 0x44, 0x50, 0x32, 0x16, 0x00, 0x20, 0x0C, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x91, 0x42, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0A, 0x00, 0x02, 0x02, 0x0A, 0x00, 0x02, 0x06, 0x0A, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x02, 0x01, 0x0A, 0x00, 0x02, 0x02, 0x0A, 0x01, 0x02, 0x02, 0x06, 0x0A, 0x01, 0x02, 0x01, 0x0A, 0x00, 0x02, 0x02, 0x0A, 0x00, 0x02, 0x02, 0x0A, 0x00, 0x02, 0x06, 0x0A, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x02, 0x01, 0x0A, 0x00, 0x02, 0x02, 0x0A, 0x01, 0x02, 0x02, 0x06, 0x0A, 0x01, 0x02, 0x01, 0x0A, 0x00,
ADP 파일은 MIDI 파일의 표현력을 약간 희생하여 단순화한 것이다. 노트가 많든 적든 2-bar 드럼 연주 패턴은 동일한 크기의 그리드로 나타낼 수 있다. 이는 바이너리 형태의 데이터라서 아두이노의 두뇌가 되는 8비트 마이크로컨트롤러에서 사용하기에 매우 적당하다. ADP 파일은 헤더를 포함하고 있으며, 노트의 수와 관계 없이 triplete이 아닌 경우(total 32스텝/2마디) 775 바이트의 고정 크기를 갖는다. 위에서 보인 바이트 어레이의 크기는 더 작다. MIDI 파일은 노트가 많아지면(예를 들어 펑크 리듬과 같이 16비트 하이햇 타격이 난무하는 경우) 당연히 커진다.
지난 수 개월 동안 내가 몰두한 것은 마이크로SD카드에 저장한 ADP 파일을 반복하여 재생하는 아두이노 코드를 짜는 것이었다. 이제는 선별한 소수의 ADP 파일을 아예 비상용으로 코드에 내재화하려 한다. 우선적으로 36개를 골라서 byte array를 만든 뒤, InternalPatterns.h라는 파일로 저장하였다. 이 비상용 패턴은 SRAM이 아니라 PROGMEM에 적재되므로 부담도 적다. 결과가 몹시 기대된다.
2025년 11월 30일 업데이트
InternalPatterns.h를 일반 텍스트파일로 취급하면 곤란하다. UTF-8 BOM(Byte-Order Mark)를 쓰지 않는 ASCII-only 또는 ISO-8859-1로 저장해야 한다. UTF-8은 0x80 이상의 값을 다른 멀티바이트 문자로 변환하므로 ADP의 구조를 파괴한다. 한글 주석이 포함된 코드를 복사하여 아두이노 IDE에 붙여넣는 것은 문제가 되지 않는다. 이 과정에서는 BOM 자체가 복사되지 않기 때문이다. 내가 즐겨쓰는 Notepad++에서 텍스트 파일을 저장할 때에는 다음과 같이 UTF-8을 선택하라. UTF-8 BOM이 아니다!
BOM에 대한 보다 상세한 정보는 9월 17일에 작성한 코딩하기 좋은 비 내리는 날 - 아두이노 나노 에브리 구입을 읽어보기 바란다.
댓글 없음:
댓글 쓰기