[FAIL]上周末做着玩的项目的尸体。当时找不到调音器了,于是脑洞大开想着用纯 HTML5 做个圆滚滚的吉他调音器,Audio API FFT 精度不够,于是只剩可视化了。含音量、频谱图、音高检测算法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
akfish
V2EX    分享创造

[FAIL]上周末做着玩的项目的尸体。当时找不到调音器了,于是脑洞大开想着用纯 HTML5 做个圆滚滚的吉他调音器,Audio API FFT 精度不够,于是只剩可视化了。含音量、频谱图、音高检测算法

  •  3
     
  •   akfish
    akfish 2014 年 8 月 26 日 6769 次点击
    这是一个创建于 4170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    当时找不到吉他的调音器了,又懒得去找,于是有了这样一个脑洞大开的产物。
    Audio API的FFT window size只能到2048,精度不够,虽然可以人肉实现FFT然后用WebGL加速到实时性能解决。
    现在调音器找到了,还要继续之前气象雷达的项目,就不继续折腾了(下次找不到时再说)。

    给尸体整理了下遗容发出来,要做音频可视化的可以参考下。

    可视化部分用的processing.js,FireFox上性能很惨淡,建议用Chrome打开。

    16 条回复    2014-08-29 15:22:03 +08:00
    incompatible
        1
    incompatible  
       2014 年 8 月 26 日
    界面美啊

    不过确实是脑洞够大。找不到调音器了用耳朵凑合一下不就行了吗。。
    akfish
        2
    akfish  
    OP
       2014 年 8 月 26 日
    @incompatible 当时要用非标准调弦,Open G神马的不熟。。。
    seki
        3
    seki  
       2014 年 8 月 26 日
    看着好赞,其实直接拿来当背景就挺好的 = =
    avrillavigne
        4
    avrillavigne  
       2014 年 8 月 26 日
    Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
    被残忍拒绝了。
    learnshare
        5
    learnshare  
       2014 年 8 月 26 日   1
    不错,Web Audio 还没高大上到调音的程度,可以尝试用本地的程序结合 H5 的界面来做?
    akfish
        6
    akfish  
    OP
       2014 年 8 月 26 日
    @avrillavigne FF的图形性能一直不如Chrome,然后processing.js的性能也不是各种绘图库里最好的,于是就蛋疼了。
    akfish
        7
    akfish  
    OP
       2014 年 8 月 26 日
    @learnshare 当时是想着一个网页不需要装任何程序调音比较cool。native的话肯定没问题,这算法瓶颈全在FFT上,FFT轻易就能跑得飞快。
    或者也可以用时域算法绕过FFT的限制。
    hustlzp
        8
    hustlzp  
       2014 年 8 月 26 日
    楼主高产啊!
    durrrr
        9
    durrrr  
       2014 年 8 月 26 日
    找不到校音器就自己做一个。。
    我对本专业的爱果然还是不够深,好失落
    Jelen
        10
    Jelen  
       2014 年 8 月 26 日
    FF卡了好久,运行不流畅
    JoyNeop
        11
    JoyNeop  
       2014 年 8 月 26 日
    Safari 用户表示严重关切
    lldld
        12
    lldld  
       2014 年 8 月 26 日
    手机上有很多,可以下一个。
    这个光FFT不够的,还要用算法算出峰值点.
    akfish
        13
    akfish  
    OP
       2014 年 8 月 26 日
    @lldld FFT是一切频域音高检测算法的基础,这个精度不够后面就不用做了。我用的是HPS算法,就是检测谐波基本频率峰值的,可视化里那些白色的小圆就是频率峰值。
    ruoyu0088
        14
    ruoyu0088  
       2014 年 8 月 26 日
    2048点FFT也可以精确测量频率的。你只需要进行连续两次FFT,找到峰值频率,然后计算该峰值在连续两次FFT中的相位变化,就可以对峰值频率进行修正得到更精确的频率值。
    akfish
        15
    akfish  
    OP
       2014 年 8 月 26 日
    @ruoyu0088 revisit的时候会试验几种FFT插值法,抛物线插值,Quinn插值等,不过FFT相关的方法都是时域换频域,高频率分辨率就会有高延时,调音器还好,计划中复杂点的应用就不行了。估计最后我会抛弃频域方法。
    nicevoice
        16
    nicevoice  
       2014 年 8 月 29 日
    你这p3有点大,加载又慢为什么不加速
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1031 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:11 PVG 02:11 LAX 10:11 JFK 13:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86