在印度的IIT-Bombay有这个技术节,在那里他们有一个名为"Artbots"的活动,我们应该设计具有艺术能力的艺术机器人.我有一个关于音乐机器人的想法,它以歌曲作为输入,检测歌曲中的音符并在钢琴上播放.我需要一些方法来帮助我计算歌曲音符的音高.关于如何去做的任何想法/建议?
我试图从声源中提取基频.也许有人在麦克风上唱A3,所以我想要检测~110Hz
我的方法是:
(峰值[0] .power = 1063.343750,.freq = 2032.715088
(峰值[1] .power = 1047.764893,.freq = 3070.605225
(峰值[2] .power = 1014.986877,.freq = 5925.878418
(峰值[3] .power = 1011.707825,.freq = 6963.769043
(Peak [4] .power = 1009.152954,.freq = 4022.363037
(Peak [5] .power = 995.199585,.freq = 4974.120605
(Peak [6] .power = 987.243713,.freq = 8087.792480
(Peak [7] .power = 533.514832,.freq = 908.691833
我们现在有一个精确的峰值列表,这些峰值被认为是彼此谐波的
Harmonic PeakPair:(0,1)= 2/3,误差:0.00468 => f0 @ 1019.946289
谐波峰值:( 0,2)= 1/3,误差:0.00969 => …
我目前正在从事我的第四年项目(计算机科学),该项目涉及音乐的自动转录 - >乐谱.我现在在Matlab中这样做,但是必须在某个阶段转换为java.
我的问题:我的程序返回纯正弦音的正确音符,现在我遇到了从自然乐器演奏的音符中检索基频的问题.对于某些音符,代表音符基础的峰值似乎完全没有.例如,当我从车库带播放G3音符时,它显示为G4,因为我的情节中只出现了第1,第3,第5和第7次谐波.我试图添加图像,但这是我的第一篇文章,它不允许我.任何指向正确方向的人都会非常感激.
最近我问了这个问题:如何从FFT获得基频?(你实际上不需要阅读它)
我现在怀疑它:如何使用cepstral算法?
我只是不知道如何使用它,因为我所知道的唯一语言是ActionScript 3,因此我几乎没有关于C,Java等中的本机函数的引用,以及我应该如何在AS上实现它们.大多数文章是关于这些语言= /(尽管如此,欢迎使用AS以外的其他语言的答案,请解释脚本如何工作请)
我发现有关cepstral的文章找到FFT结果的基本频率告诉我,我应该这样做:
信号→FT→abs()→square→log→FT→abs()→square→power倒谱
数学上:| F {log(| F {f(t)} |²)} |²
重要信息:
我不知道:
谢谢!
frequency ×3
fft ×2
actionscript ×1
algorithm ×1
arrays ×1
detect ×1
estimation ×1
matlab ×1
pitch ×1