매우 뜻밖의 방식으로 시작하며, 웹 페이지에서 완전한 악기로 구현된 phase distortion synthesis의 소프트웨어 구현체인 CZP-1을 소개합니다.
CZP-1을 사용하면 다음과 같은 일을 할 수 있습니다…
…그리고 여러분이 생각할 수 있는 그 어떤 것이든 가능합니다.
“Phase Distortion Synthesis”는 Casio가 1980년대 초에 고안하여 CZ-101와 같은 제품에 탑재한 사운드 생성 방식입니다. 저는 CZ 시리즈 신디사이저 근처에도 가본 적이 없지만, 항상 위상 왜곡(phase distortion) 신디를 연주해보고 싶었습니다. 그렇다면 2026년의 개발자는 무엇을 해야 할까요? 당연히 에이전트를 이용해 하나 만드는 것이죠.
아니요, 이건 단순히 한 번에 대충 코딩해서 만든 게 아닙니다. 그렇게 하면 소리가 제대로 나지 않고 UI도 엉망이 되겠지만, 의외로 꽤 멀리까지는 갈 수 있습니다. 이런 프로젝트의 관건은 어떻게 다른 사람들이 사용할 수 있게 만들고 완성하느냐 하는 것입니다.
web page로 가서 실행하세요. 그런 다음 건반을 누르거나 컴퓨터 키보드를 사용하여 음을 연주할 수 있습니다.
소리가 들리지 않는다면 볼륨이 줄어들어 있거나 휴대폰이 무음 모드일 수 있습니다.
사운드는 Library 패널의 뱅크(사운드 그룹)와 프로그램(개별 사운드)으로 구성되어 있습니다. 기존의 “Factory Presets” 뱅크가 선택되어 있어야 하며, 그 안의 다양한 사운드를 통해 잠재력을 확인할 수 있습니다.
멋진 사운드를 만들었고 친구도 이를 사용할 수 있게 하고 싶다면… 문제없습니다! 여러분만의 사운드가 담긴 CZP-1 웹 링크를 보낼 수 있습니다. 여기 제가 이전에 만든 것이 있습니다.
원하는 메신저에 복사/붙여넣기하거나, 문서에 저장하는 등 마음대로 하세요. 사운드 데이터는 실제 링크 안에 들어 있으며, 별도의 서버에는 아무것도 없습니다.
MIDI 지원은 MIDI에 익숙한 사람이라면 누구나 쉽게 사용할 수 있어 외부 키보드를 사용하거나 시퀀서로 구동할 수 있습니다. 페달 및 휠 지원도 일반적인 컨트롤러에 매핑되어 있습니다. 익스프레션 페달은 프로그램의 벨로시티 민감 요소에 영향을 줍니다.
그 외 모든 것에 대한 자세한 내용은 CZP-1 Manual을 확인하세요.
지난 몇 년간 여러 오디오 프로젝트를 시도했다가 중단하면서, 저는 이 분야가 프로그래밍에서 가장 어려운 분야 중 하나라고 생각하게 되었습니다. 그렇다면 현재 유행하는 에이연틱(agentic) 프로그래밍을 테스트하기에 적합한 과제겠군요.
저의 작업 방식은 다양한 에이전트들을 서로 맞붙여 보는 것입니다. (적어도 Claude Code, DeepSeek in Pi, Codex가 모두 사용되었습니다). 어떤 이유에서인지 이들은 서로 배타적인 사각지대를 가지고 있는 것 같아, 이를 통해 개별적으로는 달성할 수 없는 훨씬 더 성공적인 결과물을 향해 반복적으로 개선해 나갈 수 있었습니다.
먼저 Claude에게 웹 페이지 상의 JavaScript로 위상 왜곡 신디사이저를 구현하도록 프롬프트를 작성했습니다. 첫 시도는 놀라웠는데, 브라우저 자동화를 사용하여 어딘가에서 가져온 참조 오디오와 오디오 출력을 비교하기로 결정했기 때문입니다. 문제는 소리가 제대로 나지 않았고, 파라미터가 잘못 해석되었으며, 사용자 인터페이스가 엉망이었다는 점입니다. 하지만 Claude가 환각(hallucination)을 통해 만들어낸 믿기 힘들 정도로 이상한 프리셋들조차도 실제로 어느 정도는 작동했습니다.
그 결과, Claude가 작성한 오디오 엔진에 대한 코멘트와 함께 DeepSeek에게 작업을 넘겼고, DeepSeek은 방대한 조사를 수행하여 기본 파형의 여러 측면이 잘못되었고 믹싱 함수도 틀렸다는 등의 사실을 밝혀내어 이를 수정하는 작업을 완료했습니다.
이러한 상호 피드백 과정은 약 일주일 동안 계속되었으며, 에이전트들은 위상 왜곡 신디사이저 구현에 관한 거의 모든 정보원을 파헤치며 어느 쪽도 단독으로는 의미 있게 개선할 수 없는 수준에 도달할 때까지 반복적으로 정교화해 나갔습니다.
이 과정을 통해 현재와 같이 몇 가지 매우 구체적인 개입만으로도 오디오 엔진이 실제로 작동하게 되었습니다.
하지만 그 후에는 폴리포니(여러 음을 동시에 연주하는 기능), 변조(modulation), 포르타멘토를 포함한 레가토 슬라이딩과 같은 사용자 인터페이스 및 수많은 사용자 기능들이 기다리고 있었습니다. 이 모든 것들은 상황에 맞게 개별적으로 논의하고, 설계하고, 구현하고, 디버깅해야 했습니다. 그 중 어느 것도 자동적이지 않았으며, 폴리t포니를 위한 보이스의 라운드 로빈 할당과 같이 정확한 알고리즘을 알고 이를 정확하게 프롬프트로 요청하는 것이 기능을 완성하는 데 필수적이었습니다.
주요 교훈은 다음과 같습니다:
만약 다시 이 작업을 한다면, 개념적 일관성을 유지하는 데 유용하다는 것이 증명되었으므로 UI 작업이 시작되는 순간부터 매뉴얼 작성을 병행할 것입니다.
저수준 작업의 상황이 얼마나 미친 수준인지 강조하자면, 이 작업을 하는 동안 놀라운 경험을 했습니다. 테스트 삼아 Luduxia에서 만든 웹 게임들을 직접 작성한 WebGL2 렌더러에서 WebGPU로 포팅하기로 결정했는데, 이는 iOS Safari 등의 문제로 계속 미뤄왔던 작업이었습니다. 이 작업은 에이전트의 도움을 받아 24시간 이내에 완료되어 배포되었습니다. WebGL과 WebGPU에 익숙할수록 이것이 얼마나 충격적인 일인지 알 수 있을 것입니다. (CZP-1 작업의 일환으로, Luduxia 빌드 시스템 자체도 에이전트에 의해 포팅되었으며, 이것이 신디사이저의 최종 빌드를 수행합니다).
우리는 저수준 지식이 설계 목적에는 유용하지만, 구현에 있어서는 기계에 의해 압도당하게 될 새로운 시대에 살고 있습니다. 이러한 추세에 맞서 싸우는 것은 고통스러운 길일 뿐이지만, 이는 많은 사람을 놀라게 할 것입니다.
80년대 신디사이저에서는 벤더 간 MIDI 상호 운용성, 아주 적은 양의 메모리와 비교적 적은 연산량으로 흥미로운 사운드를 표현하고 생성할 수 있는 능력, 그리고 사용자가 목표를 달성하거나 단순히 즐거움을 얻을 수 있다면 복잡하고 난해한 것도 배울 것이라는 믿음 등 영감을 얻을 수 있는 훌륭한 요소가 많습니다. 이에 대해서는 다음에 더 자세히 다루도록 하겠습니다.