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

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

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); 

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

你是在正确的轨道上,你需要实现一个样本采集器可以使用的回调函数,这就是SampleCB的用途,C#等价物将是这样的:

 int ISampleGrabberCB.SampleCB(double SampleTime, IMediaSample pSample ) { //work with audio sample here return 0; } 

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

这里还有一篇相关文章可能会对你有帮助。