2P by neo 4일전 | favorite | 댓글 1개
  • 프로젝트 개요

    • 이 프로젝트는 음악을 악보로 변환하는 프로그램을 만드는 것을 목표로 함.
    • 외부 악기 분리 라이브러리를 사용하지 않고, 음악을 구성 악기로 분리하는 오픈 소스 프로젝트임.
    • 개인적인 필요와 간단한 오픈 소스 알고리듬의 부재가 프로젝트의 동기였음.
  • 준비 과정

    • 악기 데이터는 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는 이미 인상적인 프로젝트를 진행했음
  • 소스 코드를 찾을 수 없지만 프로젝트가 흥미로워 보임