GN⁺: Audio Decomposition – 음악을 구성 악기로 분리하는 오픈소스
(matthew-bird.com)-
프로젝트 개요
- 이 프로젝트는 음악을 악보로 변환하는 프로그램을 만드는 것을 목표로 함.
- 외부 악기 분리 라이브러리를 사용하지 않고, 음악을 구성 악기로 분리하는 오픈 소스 프로젝트임.
- 개인적인 필요와 간단한 오픈 소스 알고리듬의 부재가 프로젝트의 동기였음.
-
준비 과정
- 악기 데이터는 University of Iowa Electronic Music Studios의 데이터베이스에서 가져옴.
- 이 데이터로부터 전체 파형의 푸리에 변환과 파형의 엔벨로프를 구함.
-
작동 원리
- 악기의 소리 파형은 주로 푸리에 변환과 엔벨로프로 특징지어짐.
- 이를 통해 어떤 악기가 어떤 음을 연주하는지 파악할 수 있음.
-
푸리에 변환
- 음악 파일의 푸리에 변환을 0.1초마다 수행하여 스펙트로그램을 생성함.
- 각 악기의 저장된 푸리에 변환을 합산하여 0.1초 창의 푸리에 변환을 재구성함.
- 각 악기의 크기는 MSE 비용 함수의 주파수에 대한 편미분을 통해 구함.
-
엔벨로프
- 엔벨로프는 파형의 상한선이며, 잡음과 특정 유형의 파형에 강인한 방법이 필요함.
- 파형을 청크로 나누고 각 청크의 최대값을 취하여 엔벨로프를 구함.
- 엔벨로프를 공격, 유지, 해제로 나누어 분석함.
- 악기의 파형은 정적 또는 동적 감쇠를 가질 수 있으며, 이를 구분하기 위해 감쇠 인자와 변화율을 분석함.
-
파형의 다양한 유형
- 음악 파일을 처리하기 위해 각 음의 주파수에 대해 밴드패스 필터를 적용함.
- 각 악기에 대해 공격과 해제의 교차 상관을 통해 각 음의 시작과 끝을 찾고, MSE를 계산하여 비용을 구함.
- 푸리에 변환 단계에서 찾은 크기와 비용의 역수를 곱하여 최종 크기를 구함.
-
결과 및 디스플레이
- matplotlib의 산점도를 사용하여 악보를 표시함.
- 원래는 크기로부터 오디오를 재구성하려 했으나, 많은 문제가 발생하여 포기함.
- 악보 재구성에 유용하며, 음정이나 코드 찾기에 어려움을 겪는 경우 특히 도움이 됨.
Hacker News 의견
- 제목이 혼란스러울 수 있음. 이 프로젝트는 음원 분리가 아니라 피치 감지 알고리즘이며, 악기를 분류하는 기능도 포함함
- 결과를 수정하는 데 시간이 더 걸릴 수 있음
- 자동 음악 전사(오디오->MIDI)는 딥러닝과 음악 정보 검색의 중요한 하위 분야임
- Google의 MT3 프로젝트가 성공적인 모델로 언급됨
- 피아노 전사의 경우, 낮은 품질의 오디오에서도 거의 완벽한 정확도를 보임
- 오디오 분리에 관심이 있다면 RipX를 참고할 만함
- 분리된 트랙을 MIDI 파일로 내보낼 수 있음
- 여전히 몇 가지 문제가 있지만 잘 작동함
- 스템 분리는 이제 음악 소프트웨어의 표준이며 거의 모든 DAW가 이를 제공함
- 실제 악기 물리학은 단순한 푸리에 변환 템플릿으로 포착되지 않을 수 있음
- 트럼펫은 부드럽게 연주할 때와 크게 연주할 때 다른 조화 스펙트럼을 가질 수 있음
- 악기의 강도에 따라 조화 내용이 크게 변할 수 있음
- 각 악기에 대한 강도 의존적 푸리에 템플릿을 추가하여 정확성을 향상시킬 수 있음
- 15년 전 Audiosurf를 플레이했던 기억이 떠오름
- YouTube 비디오 데모가 소스 분리를 보여주지 않는 것 같음
- "separation"이 네 번 잘못 철자되었음을 언급하는 사람이 없음
- 일부 비디오에는 오디오가 없는 것 같음
- 이 프로젝트는 Joshua Bird의 동생의 작업일 수 있음
- Joshua Bird는 이미 인상적인 프로젝트를 진행했음
- 소스 코드를 찾을 수 없지만 프로젝트가 흥미로워 보임