首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SampleGrabber构建音频频谱/可视化工具?

如何使用SampleGrabber构建音频频谱/可视化工具?
EN

Stack Overflow用户
提问于 2011-01-04 23:16:49
回答 1查看 2.1K关注 0票数 1

我目前正在构建一个使用DS sdk的应用程序,我需要弄清楚如何不断地从音频源获取振幅,以绘制可视化工具或某种类型的频谱。我一直在尝试研究如何在音频上实现样本抓取,但我发现的所有信息都已经过时了,而且没有帮助。经过几十次尝试,这是我目前所拥有的:

代码语言:javascript
复制
        ISampleGrabber pGrabber = (ISampleGrabber)pSampleGrabber;
        hr = pGraph.ConnectDirect(GetPin(pInfinitePinTeeFilterAudio, "Output3"), GetPin(pSampleGrabber, "Input"), null);
        checkHR(hr, "1040");
        if (hr < 0) return false;
        hr = pGraph.ConnectDirect(GetPin(pSampleGrabber, "Output"), GetPin(pNullRenderer, "In"), null);
        checkHR(hr, "1041");
        if (hr < 0) return false;

        AMMediaType media = new AMMediaType();
        media.formatType = FormatType.WaveEx;
        pGrabber.GetConnectedMediaType(media); //gets and sets media type into media

        pGrabber.SetBufferSamples(true);
        int cbbuffer = 0;
        hr = pGrabber.GetCurrentBuffer(ref cbbuffer, IntPtr.Zero);

如何读取当前缓冲区上的内容,并连续读取缓冲区上的内容?

EN

回答 1

Stack Overflow用户

发布于 2011-01-05 00:38:07

你走对了路,你需要实现一个样例抓取器可以使用的回调函数,这就是SampleCB的作用,C#的等价物应该是这样的:

代码语言:javascript
复制
int ISampleGrabberCB.SampleCB(double SampleTime, IMediaSample pSample )
{
    //work with audio sample here
    return 0;
}

还要确保在图形中的样本采集器之前有一个音频解码器,否则将收到压缩的样本。

还有一篇相关的文章here可能会对你有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4595165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档