flash – 使用computeSpectrum()进行音高检测返回FFT值
>我正在使用ActionScript 3.0 for Flash Player 10.3进行开发
>我在加载的.mp3上使用computeSpectrum() >运行* Event.ENTER_FRAME *以获取byteArray中每个样本的快照 > ByteArray包含512个值(每个通道256个).这些值是FFT Spectrum,范围从0到1. >我不能使用每个样本的峰值频率(正如我发现的那样!)因为最高值不一定是基频! 结果我得到了很多随机值! 当然我也得到了一些正确的,但这还不够! 我发现了自动关联…… 或链接,或示例脚本甚至从其他脚本语言来获取它? 问候 解决方法
听起来你已经了解如何获得FFT频谱,对吧?
?http://flic.kr/p/7notw6 但是,如果你正在寻找基础(绿点),你不能只使用最高峰.它不一定是根本.在我的例子中,实际基波是100 Hz,但最高峰值是300 Hz. 您可以通过许多不同的方式找到真正的基础,并且每种方法在不同的环境中都能更好地发挥作用. comp.dsp上的一个帖子提到“FFT,倒谱,自动/互相关,AMDF / ASDF”. 举一个简单的例子,每个红点距离它的邻居都是100赫兹,所以如果你使用峰值寻找算法,然后将每个谐波和下一个谐波之间的距离平均在一起,你就会发现它的根本,但是如果错过任何峰值,或者包括额外的峰值,或者如果信号是对称的并且仅包含奇次谐波(1f,3f,5f),则失败.你需要找到模式,然后扔掉异常值然后平均.这可能是一种容易出错的方法. 您还可以对原始波形进行自相关.从概念上讲,这意味着将波形的副本滑过自身,并找到最适合自身的延迟(这将是一个完整的周期).在正常实施中,we use the FFT,though,to speed it up.基本上是自相关 > IFFT(FFT(信号)?FFT(信号)*) 其中*表示复共轭或时间反转. In Python,for instance: correlation = fftconvolve(sig,sig[::-1],mode='full') 而fftconvolve()的来源相对简单:https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L133 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |