2011-01-04 24 views
1

私は現在、DS sdkを使用するアプリケーションを構築しています。オーディオソースから一定の振幅を取得してビジュアライザーやスペクトルを描画する方法を理解する必要があります。私は、サンプルグラバーがオーディオにどのように実装されているかを見てきましたが、私が見つけたすべての情報は古くて役に立たなかった。数十の試みの後、これは私が現在持っているものです。SampleGrabberを使用して、オーディオ用のスペクトル/ビジュアライザーを構築するにはどうすればよいですか?

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

私は現在のバッファの上にあるものを読んで、そして継続的にバッファ上にあるものを読むにはどうすればよいですか?あなたは正しい軌道に乗って、あなたがサンプルグラバが使用できるコールバック関数を実装する必要がある

+0

サンプルグラバーからサンプルを取得する方法以外の作業グラフがありますか? – BrokenGlass

+0

はい、私のグラフは完全に機能しています。情報が必要な場合は、ネットワークからソースを取り出し、ローカルで再生するグラフがあります。ソース - > demux->オーディオ/ビデオデコーダ - > infピンティー - >レンダラー。グラフは、付属のサンプルグラバーでも動作します。私はsamplegrabberCBで遊んでみましたが、関連性の2つの機能しかないようです:SampleCBとBufferCB、buthの中で私は多くのドキュメンテーションを見つけることができません。 –

答えて

2

、それはSampleCBは、C#の同等の、何のためにあるのかのは、このようなものになるだろう:

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

も確認してくださいグラフのサンプルグラバーの前にオーディオデコーダがあることを確認します。そうしないと、圧縮されたサンプルが受信されます。

関連記事hereもあります。

関連する問題