제 Intel Core Ultra 7 노트북에는 NPU가 탑재되어 있지만, 일상적인 작업에서는 거의 사용되지 않았습니다. 유휴 상태로 두는 것이 아깝게 느껴져서, 저는 유용한 로컬 실험을 찾아보기 시작했습니다.
그 결과물이 바로 Fan Composer입니다. 이 앱은 팬 소리를 감지하여 주변에 조용한 사운드스케이프를 추가해 주는 작고 오픈소스인 Windows 애플리케이션입니다.
질문은 간단합니다: 일정한 팬 소리가 음악적인 배경의 일부가 된다면 덜 거슬릴까?
이것은 능동 소음 제거(Active Noise Cancellation) 기능이 아닙니다. 소리를 추가하는 것이지, 팬 소음을 없애거나 음압을 낮추는 것은 아닙니다.
Fan Composer's native Windows interface, showing speaker selection, three sound modes, maximum volume, and a spectrum. The app is stopped.
세 가지 청취 방식
- Harmonic: 안정적인 팬 피치 추정치를 기반으로 하는 연속적인 드론(drone)과 배음(overtones).
- Nature: 녹음된 자연 샘플 없이 합성한 바람 및 파도 같은 질감.
- Generative: 주변 배경 사운드와 느린 변화를 가진 시드(seeded) 음악 모티프.
세 가지 방식 모두 로컬에서 합성됩니다. 클라우드 음악 API나 다운로드된 음악 샘플은 사용되지 않습니다.
짧은 사운드 미리보기
45초 분량의 사운드 미리보기를 시청하거나 다운로드하세요.
미리보기 비디오 열기 (MP4)
0:00 Harmonic · 0:15 Nature · 0:30 Generative. 이들은 실제 Rust 합성 엔진으로 오프라인 렌더링된 것이며, 정지된 앱 스크린샷과 함께 제공됩니다. 청취 가능하도록 미리보기 게인(gain)은 약 12 dB가 높여졌습니다. 이것은 라이브 마이크 분석이나 NPU 추론의 녹음본이 아닙니다.
자동 볼륨 기능이 핵심입니다
사용자가 최대 볼륨을 설정하면, 앱이 추정되는 팬/배경 레벨 변화에 따라 재생 볼륨을 점진적으로 조절합니다. 자동 볼륨 기능은 항상 켜져 있으며, 관리할 추가 스위치가 없습니다.
주의할 점이 있습니다. 마이크는 앱 자체의 소리도 들을 수 있기 때문입니다. 단순히 마이크 음량만을 따라가면 재생음이 스스로를 추적하는 결과를 낳을 수 있습니다. Fan Composer는 출력 신호를 스펙트럼 참조로 사용하며, 추정치가 불확실할 때는 증폭을 유지하거나 줄입니다.
이는 여전히 실험적인 배경 추정치에 머물러 있습니다. 다른 안정적인 소리나 방의 변화가 영향을 미칠 수 있으며, 음향 에코 제거기(acoustic echo canceller)나 신뢰할 수 있는 팬 대화 분류기(fan-versus-speech classifier)는 아닙니다.
NPU가 실제로 하는 일
NPU는 OpenVINO를 통해 작은 음악 정책 모델을 초당 한 번 실행합니다. 이 과정에서 밝기, 음표 밀도, 움직임, 리버브 같은 매개변수들을 조정합니다. Rust는 CPU에서 FFT 분석, 볼륨 제어, 오디오 합성(audio synthesis)을 담당합니다.
앱은 NPU를 먼저 시도하고, 그다음 OpenVINO CPU를 사용하며, 마지막으로 CPU 규칙을 따릅니다. 단순히 열거된 NPU가 작동한다고 가정하는 대신, 성공적인 추론과 실제 실행 장치를 확인합니다. 현재 백엔드는 인터페이스에서 확인할 수 있습니다.
포함된 모델은 규칙 기반 정책(rule-based policy)을 모방합니다. 이것이 CPU에 비해 더 나은 음악을 만들거나 전력을 절약한다고 주장하지는 않습니다. 그러한 비교를 위해서는 여전히 적절한 측정(proper measurements)이 필요합니다.
Windows에서 사용해 보기
- Windows x64 릴리스를 다운로드하고 전체 ZIP 파일을 압축 해제합니다.
fan-composer.exe를 실행하고 스피커를 선택합니다.
- 모드를 선택하고 편안한 최대 볼륨을 설정한 후 시작(Start) 버튼을 누릅니다.
- 초기 3.5초 동안의 조용한 측정 시간을 허용하고, 그 후에 들어봅니다. **중지(Stop)**는 항상 가능합니다.
앱이 실행될 때 자동으로 재생되는 것은 없습니다. 마이크 오디오는 메모리에 유지되며 녹음되거나 업로드되지 않습니다. 설정과 명시적인 피드백은 로컬에 저장됩니다.
Rust 개발자들을 위해 스택은 음악 정책을 위한 OpenVINO C API와 함께 iced + CPAL/WASAPI + rustfft입니다. Rust MSVC 툴체인 및 C++ Build Tools를 사용하여 Windows에서 빌드합니다:
git clone https://github.com/zendoclab/fan-composer.git
cd fan-composer
cargo build --release --locked
...
빌드 가이드(build guide)에는 모델 및 NPU 런타임 패키징 방법도 포함되어 있습니다. 해당 런타임 없이 소스 빌드를 진행해도 CPU 규칙을 통해 작동합니다.
현재까지 확립된 내용?
버전 0.3.0은 합성 분석, 합성 안전성, 자동 볼륨 확인을 포함하여 26개의 자동화 테스트를 통과했습니다. 실제 NPU 추론 및 짧고 무음인 Windows 오디오 I/O 실행도 검증되었습니다. 이러한 검사들은 장시간 세션 안정성이나 향상된 청취 편안함을 보장하지는 않습니다.
제가 다음으로 궁금한 점은, 적응형 사운드가 단순히 팬 소리만 듣거나 고정된 주변 배경음악을 듣는 것보다 실제로 더 편안한지, 그리고 그 전체적인 음량 수준이 비슷할 때의 비교입니다. 청취자 피드백과 통제된 비교가 환영받습니다.
Kyu Lee, cording.ai가 제작했습니다. 소스 코드와 로컬에서 생성된 정책 모델은 MIT 라이선스를 따릅니다.