CodeZine(コードジン)

特集ページ一覧

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

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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/10/27 14:00

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

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

目次

はじめに

 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. クラス図

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

バックナンバー

連載:DirectShowフィルタの作成
All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5