2

「オンデマンド」でサウンドを再生したい。プログラムしたいのは、シンプルなドラムマシンです。

DirectShow をメモリ バッファから読み取らせることは可能ですか?(C++ で作成されたオブジェクト)

私は考えています:

たとえば、40000 ポジションのバッファを作成しますdouble(サウンドとして使用する実際のデータ型がわからないため、間違っている可能性がありますdouble)。

40000 ポジションを 1 秒間再生できます。

DirectShow オブジェクトは、このバッファの位置を何度も読み取ることになっています。バッファには、サウンドの出力の実際の値が含まれます。例 (サインのような出力):

{0, 0.4, 0.7, 0.9, 0.99, 0.9, 0.7, 0.4, 0, -0,4, -0.7, -0.9, -0.99, -0.9, -0.7, -0.4, 0}

このサウンド シーケンスの解像度はおそらくそれほど良くありませんが、私が言いたいことを表示するためだけのものです。

これは可能ですか?Google で例や情報を見つけることができません。

編集: DirectShow とストリーミング ビデオ (UBS カメラ) に取り組んでいるとき、Sample Grabber と呼ばれるものを使用しました。これは、カムからすべてのフレームに対してメソッドを呼び出しました。私は似たようなものを探していますが、音楽用であり、音楽が再生される前に呼び出されるものです。ありがとう

4

1 に答える 1

1

データをストリーミングし、DirectShow パイプラインにデータを挿入することが可能です。

設計上、外部 DirectShow インターフェイスはストリーミング データへのアクセスを提供しません。制御コードは、トポロジを構築し、フィルターを接続し、それらをセットアップして、パイプラインの状態を制御します。すべてのデータは舞台裏でストリーミングされ、フィルターはデータの断片を互いに渡し、これがデータ ストリーミングに追加されます。

サンプル グラバーは、特定のグラフ ポイントを通過するデータのコピーを取得できるヘルパー フィルターです。そうしないと、制御コードでペイロード データを使用できないため、Sample Grabber が人気を博しました。「アクセスできない」ストリーム、ライブまたはファイルバックアップ再生からビデオフレームを取得するため。

逆に、独自のデータをパイプラインに入れたい場合、Sample Grabber の概念は機能しません。データのコピーを取得することと、独自のデータを積極的にストリームに入れることは別のことです。

独自のデータを挿入するには、通常、データを生成するパイプラインに独自のカスタム フィルターを配置します。PCMオーディオデータを生成したい。生成、ファイルからの読み取り、メモリ、ネットワーク、ループなど、どこから取得するかを選択できます。バッファーを埋め、タイム スタンプを追加し、オーディオ バッファーを下流のフィルターに配信します。典型的な出発点はPushSource Filters Sample、ビデオ データを生成するフィルターの概念を導入することです。同様の方法で、PCM オーディオ データを生成します。

関連する質問:

于 2013-08-14T18:16:39.347 に答える