你需要先了解什么'音调_474795的谐波将从261.6赫兹开始作为基频,523赫兹将是第二谐波,785赫兹将是第三谐波,1046赫兹将是第四谐波等 . 后来的谐波是基频的整数倍,261.6Hz(例如:2×261.6 = 523,3×261.6 = 785,4×261.6 = 1046) .
下面,在GitHub.com上,我设计了一个不寻常的两阶段算法的C源代码,它可以在Windows上播放时对复音MP3文件进行实时音高检测 . 这种免费应用程序(PitchScope Player,可在网上获得)经常用于在MP3录制时检测吉他或萨克斯独奏的音符 . 您可以下载Windows的可执行文件,以便在您选择的mp3文件上查看我的算法 . 该算法被设计成在MP3或WAV音乐文件中的任何给定时刻检测最主要的音调(音符) . 通过在MP3录制期间的任何给定时刻的最主要音高(音符)的变化来准确地推断音符开始 .
我使用改进的DFT对数变换(类似于FFT)来首先通过查找具有峰值电平的频率来检测这些可能的谐波(参见下图) . 由于我为修改后的Log DFT收集数据的方式,我不必对信号应用窗口函数,也不必添加和重叠 . 我创建了DFT,因此其频率通道以对数方式定位,以便直接与吉他,萨克斯管等音符创建谐波的频率对齐 .
我的音高检测算法实际上是一个两阶段过程:a)首先检测ScalePitch('ScalePitch'有12个可能的音高值:{E,F,F#,G,G#,A,A#,B,C,C#,D ,D#})b)并且在确定ScalePitch之后,通过检查4种可能的Octave-Candidate音符的所有谐波来计算Octave . 该算法旨在检测复音MP3文件中任何给定时刻的最主要音高(音符) . 这通常对应于乐器独奏的音符 . 那些对我的Two Stage Pitch Detection算法的C源代码感兴趣的人可能想要从GitHub.com的SPitchCalc.cpp文件中的Estimate_ScalePitch()函数开始 .