2026년 4월 13일 월요일

[Fluid Ardule] MIDI 파일 재생에서는 5개의 버튼으로 "Transport" 기능을 구현하기가 까다롭다

Audacity나 Tracktion과 같은 DAW(Digital Audio Workstation) 소프트웨어를 열면, 과거의 테이프레코더나 MP3 재생기에서 흔히 보던 버튼 모임이 눈에 띈다. 이것을 transport(또는 transport control)라고 부른다.

요즘처럼 디지털 매체의 재생이 일상이 된 시대에는 무엇을 전송(transport)한다는 것인지 다소 낯설게 느껴질 수도 있다. 그러나 과거에 널리 쓰이던 테이프 매체를 떠올리면 이런 용어가 남아 있는 이유를 쉽게 이해할 수 있다. 파워포인트에서 여전히 ‘슬라이드’라는 표현을 쓰는 것과 비슷한 일이다.

글루건은 DIY에서 정말 좋은 도구이다. 라즈베리파이와 키패드를 제외한 모든 부품의 배치가 다 바뀌었다.

Fluid Ardule의 다섯 개 버튼 키패드.

요즘 개인 차원에서 개발을 이어가고 있는 라즈베리파이 + 아두이노 우노 기반의 SoundFont synthesizer인 Fluid Ardule에는 총 다섯 개의 버튼이 있다. 네 방향의 화살표와 맨 오른쪽의 선택(Select) 키이다. 키를 누르는 신호는 아두이노 우노의 A0 아날로그 핀으로 입력되어 라즈베리파이로 전달된다. TFT-LCD 화면에 펼쳐진 여러 항목을 이동한 뒤 원하는 곳으로 진입하는 데에는 이러한 키패드가 매우 적합하다. 그러나 재생을 조절하는 이른바 transport 기능에는 이를 어떻게 대응시켜야 할까? 사실 사족일지도 모르겠으나, 나는 Fluid Ardule에 MIDI 및 오디오 파일(ogg, wav, mp3 등)의 재생 기능을 넣어 놓았기 때문이다.

그렇다면 iPod의 버튼 배치와 기능을 흉내내어 볼 수 있지 않을까?

애플 iPod 셔풀 4세대(그림 출처: 애플).


화살표 키는 원 둘레의 네 개 버튼에 그대로 대응시키고, 선택 키는 가운데의 재생/일시정지 버튼에 대응하도록 만들면 된다. 그러나 MIDI 파일 재생에서는 몇 가지 주의할 점이 있다.

MIDI 재생은 오디오 파형 재생이 아니라 이벤트 스트림 처리에 가깝기 때문에, 일시정지를 완전하게 구현하기가 쉽지 않다. 전혀 불가능한 것은 아니지만, 이를 제대로 처리하려 들면 사실상 MIDI 파서를 직접 구현하는 수준으로 일이 커질 수 있다. 따라서 MIDI 파일에 대해서는 재생/일시정지보다는 Stop(+Panic) 중심으로 단순화하는 것이 현실적이다.

같은 이유로 빨리 보내기나 되감기도 어렵다. 일반 오디오 파일처럼 임의의 위치로 자연스럽게 이동시키기보다는, 다른 곡으로 넘기거나 현재 곡의 처음으로 돌아가 다시 시작하는 정도로 제한하는 편이 적절하다. 진행 상태를 초 단위로 화면에 표시하는 일도 일반 오디오에 비해 훨씬 까다롭다.

결국 버튼의 의미는 MIDI 파일과 일반 오디오 파일에 대해 동일하게 둘 수 없다. 오디오 파일에서는 재생/일시정지, 빨리 보내기, 되감기, 시간 표시 같은 일반적인 트랜스포트 기능을 비교적 자연스럽게 제공할 수 있지만, MIDI 파일에서는 Stop(+Panic), 이전/다음 곡, 처음부터 다시 시작하기처럼 더 단순하고 안정적인 동작 위주로 설계하는 것이 바람직하다.

생각보다 까다롭다!

곡 목록으로 되돌아가는 기능은 특정 키를 길게 누르는 방식으로 구현하면 될 것이다.

민웰(Mean Well) 5V 10A SMPS는 저전압 문제를 완전히 해결하지 못하였다

SMPS의 출력 터미널, 내가 만들어 넣은 중간 단계의 스크류 터미널, 그리고 I2S DAC 핀 헤더(즉 GPIO를 통해 흘러 나오는 전원 전압)에서 측정한 전압이 생각보다 큰 차이를 보였다. 전원 케이블과 커넥터를 거치면서 이렇게 많은 전압 강하가 일어날 줄은 미처 예상하지 못했다. 

유전원 USB 허브를 사용했음에더 불구하고 Mackie Onyx 2-2 Producer 오디오 인터페이스를 연결하는 순간 라즈베리파이는 저전압 경고를 내다가 정상 상태가 된다. 그냥 라즈베리파이 전용 3.5A 전원 어댑터를 쓰고 구태여 고용량의 SMPS를 구입할 필요가 없었던 것은 아닐까? 무엇 하나 생각하는대도 되는 것이 없다.

아직 불완전한 트랜스포트 기능을 완결한 뒤에는 아두이노 우노에서 불필요한 기능을 걷어낼 계획이다. 라즈베리파이의 TFT-LCD가 주 디스플레이 기능을 충실히 수행하고 있기 때문에 아두이노 우노의 1602 LCD는 사실상 필요하지 않다. 당초 계획에서는 시리얼 통신을 통해 두 기기 사이에서 강한 handshaking을 하고 라즈베리파이 -> 아두이노 우노 방향의 신호 전송이 필요했었다. 그러나 이제는 반대 방향으로 버튼/인코더/pot 신호를 일방향 전송만 하면 되므로 펌웨어 개발에 대한 부담이 훨씬 줄어들었다. MIDI activity를 LED로 표시하는 문제는 아직 고민 중이다. 이는 아두이노 우노가 라즈베리파이의 신호를 받아야 할 이유를 남겨놓기 때문이다.

'전원을 켜고 키보드를 연결하면 피아노 소리가 난다'라는 기본 목표는 이미 충분히 달성하였다. 버튼을 조작하여 사운드폰트를 바꾸면 키보드 컨트롤러의 패드를 터치하여 드럼 소리도 낼 수 있다. 프로그램 변경, CC 조절 등 추가적인 기능을 담아 가는 것이 앞으로의 숙제이다.    

댓글 없음: