기타 Lobsters · 1일 전

"도대체 누구 쓰라고 만든 건지 모르겠는 Web Audio API" 개발자의 극딜

핵심 요약
  • 한 개발자가 Web Audio API가 실제 게임이나 음악 제작 환경에서 쓰기에는 핵심 기능이 결여되고 비대하기만 하다고 강하게 비판했습니다.
  • 기본적인 오디오 샘플 버퍼 채우기 작업조차 제대로 지원하지 않으며, 블루투스 연결에 따라 샘플 레이트가 멋대로 바뀌는 등 치명적인 구조적 문제를 짚었습니다.
  • WebGL이나 Canvas처럼 유용한 추상화를 제공하지 못하고 웹 오디오 표준이 갈피를 잡지 못하고 있다는 지적이 공감을 얻었습니다.
요약 웹 개발자들 사이에서 종종 논란이 되는 웹 오디오(Web Audio) API의 기형적인 설계 구조를 비판하는 개발자의 글이 관심을 모았습니다. 글쓴이는 WebGL이나 HTML5 Canvas 같은 다른 웹 그래픽 표준들의 경우 몇 가지 흠집은 있어도 로우레벨 GPU 접근을 제공하거나 2D 렌더링을 깔끔하게 추상화해 유용하게 쓰인다고 평가했습니다. 반면 Web Audio API는 대체 누구를 위해 만들어졌는지 도무지 이해할 수 없을 정도로 방향성을 잃었다고 꼬집었습니다. 명세서에는 현대 게임 오디오 엔진 수준의 기능과 데스크톱 오디오 믹싱·프로그래밍 환경을 아우르겠다고 적혀 있지만, 실제로는 프로 오디오 환경이나 게임 엔진에서 쓸 수 없을 만큼 기본기가 부실하다는 지적입니다. 예컨대 내장된 '다이내믹스 컴프레서(DynamicsCompressorNode)'는 실제 컴프레서의 핵심 기능이 빠져 있고 브라우저마다 동작이 제각각이라 신뢰할 수 없으며, 고성능 DSP 필터 작업은 어차피 WebAssembly(asm.js)나 웹 워커(Web Worker)로 직접 수학 연산을 돌리는 게 표준적인 방식입니다. 더 큰 문제는 가장 기초적인 작업이어야 할 '샘플 계산 및 재생'조차 제대로 수행하기 어렵다는 점입니다. 전통적인 오디오 프로그래밍에서는 링 버퍼(ring buffer) 구조를 통해 스피커가 읽어갈 오디오 샘플을 프로그램이 채워 넣는 간단한 방식을 씁니다. 그러나 웹 오디오에서 이를 흉내 내기 위해 쓰이던 ScriptProcessorNode는 2014년에 비권장(deprecated) 처리된 뒤 오랫동안 대체재가 제대로 안착하지 못했습니다. 심지어 오디오 컨텍스트의 샘플 레이트는 브라우저나 OS, 블루투스 이어폰 연결 여부에 따라 제멋대로 바뀌는데, 동적으로 생성된 오디오를 브라우저가 알아서 리샘플링해 주는 기능도 노출되어 있지 않아 개발자들을 깊은 멘붕에 빠뜨리고 있습니다.
Sponsored · 광고