MP3 녹음에서 기타 솔로의 음표를 감지하는 것과 같이, 다년생 음악에서 피치 감지를 연구하는 데 수년을 보냈습니다. 또한 프로세스에 대한 간단한 설명을 제공하는 Wikipedia 섹션을 작성했습니다 (아래 링크의 "피치 감지"하위 섹션 참조).
하나의 키가 피아노를 눌렀을 때, 우리가 듣는 것은 하나의 진동 주파수가 아니라 복합음 수학적으로 관련된 다른 주파수에서 발생하는 다중 진동 진동 입니다. 서로 다른 주파수에서이 진동 복합 요소를 고조파 또는 부분이라고합니다. 예를 들어, 피아노에서 Middle C 키를 누르면 컴포지트 고조파의 개별 주파수가 기본 주파수로 261.6Hz에서 시작하고 523Hz는 2 차 고조파, 785Hz는 3 차 고조파, 1046Hz는 후기 고조파는 기본 주파수 261.6Hz의 정수 배입니다 (예 : 2 x 261.6 = 523, 3 x 261.6 = 785, 4 x 261.6 = 1046).
수정 된 DFT Logarithmic Transform을 사용하여 피크 레벨의 주파수를 찾아 가능한 고조파를 먼저 감지합니다 (아래 다이어그램 참조). 수정 된 Log DFT에 대한 데이터를 수집하는 방식 때문에 신호에 윈도우 기능을 적용하거나 추가 및 겹치지 않아도 됩니다 . 그리고 기타, 색소폰 등의 음표로 고조파가 생성되는 주파수와 직접 정렬되도록 주파수 채널을 대수적으로 배치하도록 DFT를 만들었습니다.
이제 은퇴하면서 PitchScope Player 라는 무료 데모 앱 내에서 피치 감지 엔진의 소스 코드를 공개하기로 결정했습니다 . PitchScope Player는 웹에서 사용할 수 있으며 Windows 용 실행 파일을 다운로드하여 선택한 mp3 파일에서 작동중인 알고리즘을 확인할 수 있습니다. 아래의 GitHub.com에 대한 링크는 사용자 정의 로그 DFT 변환으로 고조파를 감지하는 방법을 볼 수있는 주파수를 정의하는 올바른 정수 관계를 만족하는 부분 (고조파)을 찾는 전체 소스 코드로 연결됩니다. 피치'.
내 피치 감지 알고리즘은 실제로 2 단계 프로세스입니다. a) 먼저 스케일 피치 가 감지됩니다 ( 'ScalePitch'에는 12 가지 가능한 피치 값이 있습니다 : {E, F, F #, G, G #, A, A #, B, C, C #, D , D #}) b) ScalePitch가 결정되면 옥타브 는 4 개의 가능한 옥타브 -Candidate 음표에 대한 모든 고조파를 검사하여 계산됩니다. 이 알고리즘은 특정 시점에서 대위 MP3 파일 내에서 가장 지배적 인 피치 (음표)를 감지하도록 설계되었습니다. 일반적으로 악기 솔로의 음표에 해당합니다. 2 단계 피치 감지 알고리즘의 C ++ 소스 코드에 관심이있는 사용자는 GitHub.com의 SPitchCalc.cpp 파일에있는 Estimate_ScalePitch () 함수에서 시작하려고 할 수 있습니다.
https://github.com/CreativeDetectors/PitchScope_Player
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
아래는 polyphonic mp3 녹음에서 기타 솔로 3 초 동안 Logarithmic DFT (내 C ++ 소프트웨어로 제작)의 이미지입니다. 솔로를 연주하면서 기타의 개별 음에 고조파가 어떻게 나타나는지 보여줍니다. 이 Logarithmic DFT에 대한 각 노트마다 여러 고조파가 수직으로 확장되는 것을 볼 수 있습니다. 각 고조파는 동일한 시간 너비를 갖기 때문입니다. 음표의 옥타브가 결정되면 기본 주파수의 빈도를 알 수 있습니다.
아래 다이어그램은 해당 음표의 스케일 피치가 결정되면 올바른 옥타브 후보 음표 (즉, 올바른 기초)를 선택하기 위해 개발 한 옥타브 감지 알고리즘을 보여줍니다. C ++에서 메소드를보고 싶은 사람들은 GitHub의 소스 코드에 포함 된 FundCandidCalcer.cpp 파일의 Calc_Best_Octave_Candidate () 함수로 이동해야합니다.