잘 알려지지 않은 오디오 코덱, N64에 딱 맞다

4 days ago 11

ULC(Ultra Low Complexity Codec) 를 N64에 이식해 44,100Hz 스테레오 오디오를 CPU 시간 약 4%, RSP 시간 약 5%로 재생함 Opus에 가까운 음질과 비트레이트를 제공하면서 복잡도는 ADPCM의 약 4배여서, 게임 플레이 중 배경 음악과 음성 재생에 활용할 수 있음 MP3와 같은 MDCT 기반 변환 코덱이지만, 다중 대역 분할과 엔트로피 부호화 대신 단순한 4비트 단위 형식으로 계수를 저장해 디코딩 부담을 줄임 N64의 제한된 보조 프로세서 메모리에 맞춰 16비트 고정소수점과 1,024샘플 블록을 사용하고, 역변환 등 주요 연산을 RSP로 옮김 디코더는 Libdragon preview 브랜치에 통합됐으며, N64용 Half-Life 포트는 ULC를 사용해 소리 2,500개와 음악 27곡을 64MB 카트리지 이미지에 담음 N64 오디오의 저장 공간과 연산 제약 PlayStation은 CD에서 비압축 오디오를 바로 스트리밍할 수 있었지만, N64는 카트리지 용량과 93MHz CPU의 처리 시간이 제한적이었음 Nintendo의 플랫폼 라이브러리 Libultra는 벡터 보조 프로세서 RSP를 그래픽과 사운드 처리에 사용했지만, Nintendo는 오랫동안 외부 개발자의 직접적인 RSP 프로그래밍을 허용하지 않았음 Libultra의 ADPCM 재생 기능은 출력 버퍼로 오디오를 보내기 직전에 RSP에서 압축을 해제해 샘플 저장 공간을 4분의 1로 줄였음 그래도 44,100Hz 스테레오 5분 분량이 약 12MB여서, 샘플레이트를 절반으로 낮춰도 카트리지에 부담이 컸음 Mario 64 전체 ROM은 8MB였으며, 가장 큰 N64 게임도 64MB였음 대부분의 게임 음악은 트래커와 유사한 방식으로 짧은 샘플을 정해진 시점에 재생하고 제한적인 효과를 적용했으며, 완전히 녹음된 음악은 용량상 쓰기 어려웠음 N64 수명 후반에는 일부 개발자가 RSP 직접 접근을 허가받았고, Conker's Bad Fur Day는 이를 이용해 많은 대사 샘플을 MP3로 압축했음 MP3 디코딩 부담으로 프레임레이트가 영향을 받았으며, 컷신에는 쓸 만했지만 게임 중 지속적인 배경 음악이나 효과음에는 부담이 너무 컸음 Libdragon의 기존 코덱으로 부족했던 부분 오픈소스 대안인 Libdragon도 RSP 기반 실시간 ADPCM 디코더를 제공함 Xibalba 64는 음악을 ADPCM으로 압축했으며, 32MB ROM 중...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵