2025년 11월 20일 목요일

Nano Ardule 드럼 패턴 연주기, 이제 마무리의 단계에 들어서다

막바지까지 근본적인 설계 개념을 고치느라 시간이 많이 걸렸다. 지난 7월부터 만들어진 스케치 폴더는 이제 100개를 훌쩍 넘어간다. 프로그래밍에만 투자한 시간은 아마 수백 시간은 족히 넘을 것이다. 이런 열정으로 다른 것을 했더라면 더 많은 것을 성취하지는 않았을까?

어제는 어색한 UI를 수정하고 스케치를 여러 파일로 나누는데 집중하였다. 2천 줄이 훌쩍 넘어간 코드는  스케치 파일 하나로 관리하기가 점점 어려워지기 때문이다. C++의 문자열 표현 방법 같은 것은 이제 익숙해질 때가 되었지만, 아직도 챗GPT가 만든 코드를 그대로 가져다가 빌드하기 바쁘니 실력이 잘 늘지 않는다.

다음의 쇼츠 영상은 Nano Ardule이 롤랜드 사운드캔버스 SC-D70로 드럼 패턴을 보내어 재생하는 모습을 찍은 것이다. 영상에서는 2 마디의 Rock 패턴을 2회씩 연이어서 재생한다. 다음 패턴을 로드할 때에는 아쉽게도 약간의 지연이 발생한다. 처음 설계 당시에는 한 곡에 해당하는 패턴의 반복과 순서 정보를 사용자 정의 파일로 만들어어서 자연스럽게 재생하고자 하였으나, 이는 아두이노 나노(에브리)에 쓰이는 8비트 20MHz 단일 마이크로컨트롤러(ATmega4809)에게는 매우 어려운 일임을 알게 되었다. 곡 전체의 드럼 연주 정보를 재생할 경우에는 PC에서 type 0 MIDI 파일로 전환하여 마이크로SD카드에 옮긴 다음 이를 읽어서 아두이노 나노에서 처리하면 지연이 없다. 


헤드폰을 연결하여 들어보니 사운드캔버스 SC-D70의 드럼 소리가 SAM9703(CleanWave GMS963200-B ROM)에 비하여 더 훌륭하게 들린다. 롬 용량 자체도 GMS963200-B(4MB)보다 훨씬 더 큰 것으로 알려져 있다. SC-8820과 동일 음원을 쓰는 SC-D70의 사운드롬 용량은 24MB라 한다.

내가 접한 많은 컴파일 오류 중에는 함수를 사용하기 전에 선언하지 않았다고 하는데, 실제로 함수(특히 struct) 선언은 윗부분에서 하고 있었기 때문이다. 이 문제의 원인과 해결 방법은 별도의 위키 문서 '아두이노 함수 프로토타입 자동 생성이 struct에서 오류를 일으키는 이유'에 기록해 두었다. 이는 아두이노 IDE가 사용자 정의 함수의 프로토타입을 자동으로 생성하면서 일어나는 그 특유의 버그라고 한다.

드럼 연주 정보(2-bar 패턴)을 수록한 INDEX.TXT가 수백 라인으로 아무리 길어도 메모리 문제 없이 읽어들이는 방법(오프셋 활용)과 마이크로SD카드 인식에 실패할 경우를 대비하여 프로그램 내에 몇 개의 연주 패턴을 이식해 넣는 것만 해결하면 완성이다. Bank MSB/LSB 설정과 같은 MIDI sound module 제어 기능을 몇 개 더 추가하는 것도 생각 중이다.


댓글 없음: