用Windows API 和 DirectShow做了一个播放器.
整个播放已经实现.下一步是为播放器做一个音频的可视效果.
比如最常见的就是那种柱状的会动的.也有画波形的,云云...网上查了许久,没有找到方案.
但是这东西非常常见.几乎每个播放器都有(就连什么都不带的foobar都有).所以我猜这个可能并不是十分复杂.我觉得他们可能是捕捉当前的音频数据...然后分析(比如处于 xx HZ的有多少DB)...然后Paint到界面上.
Paint似乎没有问题,不过捕捉当前的音频数据却是个大问题.
查了许久没有查到相关资料.只找到能输出到文件的几个Filter例子.
但是这个不能拿出来分析和显示呀,是个问题...以上是背景说明,下面是提问:
捕捉当前的音频数据->分析->Paint这个思路合适否?
如何捕捉当前的音频数据?

解决方案 »

  1.   

    你这个就是对音频数据进行采样,并根据采集点的值实时绘制出波形曲线图的过程,曲线图你也可以以立方体的效果展现出来。
    可以参考一下下面的资料,不过是winform的程序。
    http://www.codeproject.com/KB/cpp/waverender.aspx
      

  2.   

    谢谢您的回复.
    我大概知道了思路.不过那个VB.NET的程序跟WIN32差得比较远....毕竟封装的好..
    音频采样的话,是否要使用Sample Grabber Filter呢,它的头文件和
    MSDN说它和Microsoft® Direct3D® headers later than version 7会有冲突.
    不知道会不会影响以后用D3D优化界面...
      

  3.   

    那个是通过FFT来绘出的。这个我也正在做。。
    有个参考http://www.codeproject.com/KB/audio-video/DSound_Spectrum3.aspx
    他是用libmad、WMF来解码,DirectSound输出然后在FFT 、绘出条形柱。
      

  4.   

    嗯,谢谢,4楼的帮助跟大些....不过它用的是DirectSound..
    FFT是那个转化的算法吧,貌似...不过有一个问题还是没有解决
    "如何捕捉当前的音频数据?",当然是用DirectShow
      

  5.   

    接一个sample grab fitler就可以了,注册回调方法,在里面可以得到每个sample.