'피치'이 실제로 무엇인지 이해해야합니다 (아래 위키 백과 링크 참조). 기타 또는 피아노에서 단일 음을 만들었을 때 소리가 들리는 진동의 한 주파수가 아니라 수학적으로 다른 여러 주파수에서 발생하는 여러 소리 진동의 합성이 있습니다. 다른 주파수에서 진동의 복합체의 요소를 고조파 또는 부분 음이라고합니다. 예를 들어 피아노의 미들 C 키를 누르면 합성 고조파의 개별 주파수는 기본 주파수로 261.6 Hz에서 시작되고 523 Hz는 제 2 고조파, 785 Hz는 제 3 고조파, 1046 Hz는 4 차 고조파 등이 될 수 있습니다. 이후의 고조파는 기본 주파수 261.6 Hz (예 : 2 x 261.6 = 523, 3 x 261.6 = 785, 4 x 261.6 = 1046)의 정수배입니다.
다음은 GitHub.com에서 Windows에서 재생되는 동안 다성 음악 MP3 파일에서 실시간 피치 검색을 수행 할 수있는 이상한 2 단계 알고리즘의 C++ 소스 코드입니다. 이 무료 응용 프로그램 (PitchScope Player, 웹에서 사용 가능)은 MP3 녹음시 기타 또는 색소폰 솔로의 음을 감지하는 데 자주 사용됩니다. Windows 용 실행 파일을 다운로드하면 선택한 MP3 파일에서 알고리즘을 볼 수 있습니다. 이 알고리즘은 MP3 또는 WAV 음악 파일 내에서 주어진 시간에 가장 지배적 인 음조 (음표)를 감지하도록 설계되었습니다. 음표 세트는 MP3 녹음 중 주어진 순간에 가장 지배적 인 음조 (음표)의 변화로 정확하게 추론됩니다.
수정 된 DFT Logarithmic Transform (FFT와 유사)을 사용하여 피크 레벨을 가진 주파수를 찾아 이러한 가능한 고조파를 먼저 감지합니다 (아래 다이어그램 참조). 수정 된 로그 DFT에 대한 데이터를 수집하는 방식 때문에 신호에 윈도우 기능을 적용 할 필요가 없으며 추가 및 중첩 할 필요가 없습니다. 그리고 DFT를 만들었으므로 주파수 채널을 대수적으로 배치하여 기타, 색소폰 등의 음표에서 고조파가 생성되는 주파수와 직접 정렬합니다.
내 피치 검출 알고리즘은 실제로 두 단계 프로세스입니다. a) 먼저 ScalePitch가 감지됩니다 ('ScalePitch'에는 {E, F, F #, G, G #, A, A #, B, C , C#, D, D #}) b) ScalePitch가 결정되면, 옥타브는 4 가지 옥타브 - 후보 노트에 대한 모든 고조파를 조사하여 계산됩니다. 이 알고리즘은 다성 음악 MP3 파일 내에서 특정 시간에 가장 지배적 인 음조 (음표)를 감지하도록 설계되었습니다. 그것은 대개 악기 솔로의 음표에 해당합니다. 내 Two Stage Pitch Detection 알고리즘에 대한 C++ 소스 코드에 관심이있는 사용자는 GitHub.com의 SPitchCalc.cpp 파일 내 Estimate_ScalePitch() 함수에서 시작하려고 할 수 있습니다.
https://en.wikipedia.org/wiki/Transcription_(music)#Pitch_detection
https://github.com/CreativeDetectors/PitchScope_Player
얼마나 많은 톤 또는 사인파 우리는 원래의 신호에 대해 말을하는거야? DTMF 신호의 2 코어 톤과 같은 몇 가지 경우 FFT가 작동 할 가능성이 높습니다. 봉우리를 검색하면됩니다. 그렇지 않으면 음악의 경우 일반적으로 컴퓨터 과학 및 신호 처리에서 어려운 문제로 알려져 있습니다. "자동 음악 녹음"에서 인터넷 검색을 할 수 있으며이를 시도하는 일부 소프트웨어 나 코드를 찾을 수 있습니다. – selbie복잡한 사운드를 처리 할 수있는 Melodyne이라는 유명한 소프트웨어가 있습니다. – cmannett85
이 질문의 가능한 중복 : http://stackoverflow.com/questions/4337487/chord-detection-algorithms/4339225#4339225 – hotpaw2