SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

DirectShowフィルタの作成

オーディオチャンネルを分離する
DirectShowフィルタの作成 - 前編

複数の出力ピンを持つDirectShowフィルタの作成方法

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (6.3 KB)

 ステレオオーディオをL/Rチャンネルで分離するフィルタの作成を通じて、1つの入力ピンと2つの出力ピンを持つDirectShowフィルタの作成方法を解説します。前編ではアップストリームフィルタに接続するところまで作成します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 DirectShowフィルタには、さまざまな種類があります。その中で比較的実装が難しいのが、複数の入力ピンや出力ピンを持つフィルタです。このようなフィルタはDirectShow基底クラスライブラリにおいて、CSourceCTramsformFilterのように直接サポートするクラスが用意されていません。そのため、それらの基底クラスであるCBaseFilterから派生して作る必要があります。

 本稿では、1つのステレオオーディオストリームから、L/Rチャンネルで分離した2つのモノラルオーディオストリームを出力するフィルタ(図1)の作成を通じて、1つの入力ピンと2つの出力ピンを持つフィルタをCBaseFilterから派生して作成する方法を解説します。

図1. フィルタの動作イメージ
図1. フィルタの動作イメージ

対象読者

  • C++言語が分かる方
  • DirectShowアプリケーションを作成したことのある方
  • DirectShowフィルタの作成に興味のある方

必要な環境

 Visual Studioは過去のバージョンでも良いですが、添付のソースコードは2008でコンパイルを確認しています。

フィルタの仕様

 今回作成するフィルタの機能は「はじめに」で述べました。それを踏まえてフィルタとしての仕様をまとめます(表1)。

表1.フィルタの仕様
種類 スプリッタフィルタ
名前 Audio Channel Splitter Filter
入力ピン数 1
出力ピン数 2
メジャータイプ MEDIATYPE_Audio
サブタイプ MEDIASUBTYPE_PCM
フォーマットタイプ FORMAT_WaveFormatEx

 メジャータイプ、サブタイプおよびフォーマットタイプは、入力ピンと出力ピンで共通です。オーディオフォーマットは無圧縮PCMのみとします。チャンネル数は入力ピンでは2、出力ピンでは1とします。

 フィルタを実装するときは、フィルタそのものを表すクラスの他に入力ピンと出力ピンを表すクラスを実装する必要があります。これらのクラス関係を整理しておきます(表2、図2)。

表2.実装するクラス
役割 クラス名 派生元
フィルタクラス AudioChSplitterFilter CBaseFilter
入力ピンクラス AudioInPin CBaseInputPin
出力ピンクラス AudioOutPin CBaseOutputPin
図2. クラス図
図2. クラス図

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
フィルタクラスの実装

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
DirectShowフィルタの作成連載記事一覧

もっと読む

この記事の著者

syu5()

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3059 2008/10/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング