TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 23 READS

기타 USB 인터페이스 안에 앰프 모델을 통째로 넣다: iRig HD X 펌웨어 개조기

기타 USB 인터페이스 안에 앰프 모델을 통째로 넣다: iRig HD X 펌웨어 개조기
SOURCE IMAGE · HACKER NEWS

기타용 USB 오디오 인터페이스는 대개 소리를 컴퓨터로 넘겨주는 다리 역할에 머문다. IK 멀티미디어의 iRig HD X도 원래는 기타 신호를 다른 컴퓨터로 보내 그곳에서 앰프 모델링을 처리하도록 만들어진 제품이다. 그런데 한 개발자가 이 인터페이스의 펌웨어를 갈아엎어, 앰프 모델링 연산을 기기 내부에서 직접 수행하도록 만들었다. 신호 경로는 기타에서 iRig 코덱을 거쳐 NAM A2-Lite 모델로, 다시 헤드폰이나 앰프로 이어진다. 중간에 맥이나 스마트폰, 별도의 마이크로컨트롤러 보드는 모두 사라졌고, 전원은 USB 케이블 하나로 공급된다.

이 작업이 가능했던 이유는 인터페이스 내부에 이미 충분한 연산 자원이 들어 있었기 때문이다. iRig HD X는 NXP MIMXRT1011DAE5A 칩을 중심으로 설계돼 있는데, 이는 하드웨어 부동소수점 연산기, 밀결합 메모리(TCM), 외부 QSPI 플래시, SAI 오디오 인터페이스와 eDMA를 갖춘 500MHz Cortex-M7이다. 평소 이 칩은 코덱을 설정하고 샘플을 옮기며 노브 입력을 처리하는 정도의 일만 했고, 오디오 인터럽트 사이의 대부분 시간을 대기 상태로 보냈다. 개발자는 앞서 ESP32-S3 기반 페달 프로토타입을 위해 이 인터페이스의 USB 오디오 경로를 다시 작성하면서 펌웨어를 읽어냈고, 그 과정에서 놀고 있는 이 큰 칩의 존재를 무시하기 어려워졌다고 밝힌다.

128KiB 안에 모델을 우겨넣기

사용된 NAM A2-Lite는 Taurus에서 쓰는 A2 계열 중 가장 작은 모델로, 단일 순환 앰프 모델과 48kHz 오디오를 다룬다. 다만 엔진 객체 자체가 91,204바이트를 차지해, 일반적인 메모리 배치로는 감당할 수 없었다. Cortex-M7의 FlexRAM은 32KiB짜리 뱅크 네 개로 구성되며 부팅 시 명령어 TCM, 데이터 TCM, 일반 온칩 RAM 중 하나로 지정할 수 있다. 개발자는 세 뱅크를 데이터 TCM(DTCM)으로, 한 뱅크를 OCRAM으로 설정했다. 7,516바이트 크기의 압축 모델은 시작 전까지 플래시에 머물다가, 부팅 시 가중치와 이력이 DTCM으로 옮겨진다. 최종 빌드는 DTCM 91,232바이트를 사용해 7,072바이트를 남기고, 스택을 포함한 OCRAM은 10,664바이트를 써서 오디오 처리와 기타 펌웨어 용도로 22,104바이트를 확보했다.

실시간 마감 시간과의 싸움

실시간 오디오에서 핵심은 정해진 시간 안에 연산을 끝내는 것이다. 처음에는 48샘플 블록으로 엔진을 구동했는데, 48kHz에서 한 블록은 1밀리초, 즉 500MHz 프로세서 기준 50만 사이클에 해당한다. 흥미로운 대목은 최적화 시도의 결과다. 개발자는 Cortex-M7의 DSP 명령어를 먼저 시도했지만, 계층 단위로 단계화한 구현은 662,042사이클, 직접 작성한 2프레임 컨볼루션 커널은 1,001,381사이클이 걸려 둘 다 마감을 넘겼다. 정작 가장 빠른 것은 특별한 손질을 하지 않은 이식성 위주의 전체 모델 부동소수점 엔진이었다. 캐시와 FPU, 컴파일러가 수작업 커널보다 더 나은 스케줄을 이미 만들어냈던 것이다. 결국 영리한 코드를 걷어내고 제시간에 끝나는 버전을 택했으며, 최악의 블록도 가용 시간의 88.45%만 쓰고 57,740사이클을 남겼다.

최종 펌웨어는 라이브 버퍼를 16프레임(0.333밀리초, 마감 166,667사이클)으로 줄였다. 여기에는 안전장치가 들어 있다. 네 개짜리 DMA 큐 중 하나라도 뒤처지면 두 SAI 스트림을 모두 재시작하는데, 이때 결함은 시스템 정지가 아니라 들을 수 있는 클릭음이나 순간적인 끊김으로 나타난 뒤 재생이 이어진다. 펌웨어는 I2C로 원래 코덱을 설정하고 eDMA를 통해 SAI로 스테레오 오디오를 흘려보내며, 입력 블록마다 부동소수점으로 변환해 A2-Lite에 통과시킨 뒤 다시 변환해 재생 큐에 넣는다. 두 번째 출력 채널에도 동일하게 처리된 신호를 실어 헤드폰과 앰프 경로가 정상적으로 동작한다. 물리 노브가 헤드폰 음량을 조절하는 기능도 복원했는데, 첫 라이브 빌드가 지나치게 큰 소리로 올라와 이 복원이 시급했다는 대목이 실무적 현실감을 준다.

원본 대비 −115.7dB, 사실상 반올림 오차

결과 검증은 정량적으로 이뤄졌다. 개발자는 동일한 15초 길이 48kHz 기타 녹음을 업스트림 NeuralAmpModelerCore로 렌더링하고, iRig 내부 RT1011이 처리한 샘플을 임시 펌웨어로 USB를 통해 되받아 비교했다(비교 후 라이브 펌웨어를 복원했다). 두 결과는 0샘플에서 정렬됐고, 시작 구간을 포함한 전체 15초에 걸친 상대 널 값은 −115.70dB였다. 최대 오차는 풀스케일의 수백만분의 몇 수준으로, 서로 다른 컴파일러와 프로세서에서 비롯된 부동소수점 반올림에 불과하며 코덱의 아날로그 잡음 바닥보다 한참 아래에 있다. 즉 물리적 기기 안의 앰프 소리는 원본 소프트웨어 렌더링과 사실상 구별되지 않는다.

한국의 임베디드·오디오 실무자 입장에서 이 사례가 주는 함의는 분명하다. 상용 기기 안에서 놀고 있는 연산 자원이 생각보다 크며, 펌웨어 계층을 장악하면 별도 하드웨어 추가 없이 기능을 재정의할 수 있다는 점이다. 또한 극한 최적화가 항상 정답은 아니라는 교훈도 있다. 손으로 짠 SIMD 커널이 컴파일러의 자동 스케줄링에 밀린 것은, 현대 마이크로컨트롤러에서 캐시·FPU·컴파일러의 협업이 얼마나 강력한지를 보여준다. 다만 이 프로젝트는 특정 칩(RT1011)과 특정 모델(A2-Lite)에 딱 맞춰진 개인 실험이라는 한계가 있다. 메모리 배치나 마감 시간 여유가 모델 크기에 민감하게 의존하고, 결함 처리 방식도 오류를 완전히 없애기보다 가청 결함으로 흡수해 복구하는 방식이라, 상용 제품 수준의 견고함으로 곧장 이어진다고 보기는 어렵다. 그럼에도 약 열두 시간 만에 USB 인터페이스 하나를 완결형 앰프 페달로 바꿔낸 과정은, 하드웨어를 다시 들여다보게 만드는 좋은 참고 사례다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://playtaurus.com/blog/i-put-nam-a2-lite-inside-an-irig...
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...