IAudioMediaType
COM公式ドキュメント
IAudioMediaType インターフェイスは、sAPO が適切なオーディオデータ形式についてオーディオエンジンとネゴシエートするために使用する情報を取得できるようにするメソッドを公開します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IsCompressedFormat メソッドは、オーディオデータ形式が圧縮形式かどうかを判定します。
| pfCompressed | BOOL* | out | Boolean 値を受け取ります。形式が圧縮されている場合は TRUE、圧縮されていない場合は FALSE になります。 |
戻り値
IsCompressedFormat メソッドは、オーディオデータ形式が圧縮されている場合は S_OK を返し、それ以外の場合はエラーコードを返します。
解説(Remarks)
なし。
IsEqual メソッドは、2 つのメディアタイプを比較し、それらが同一かどうかを判定します。
| pIAudioType | IAudioMediaType* | in | 比較するメディアタイプの IAudioMediaType インターフェイスへのポインターを指定します。 | ||||||||
| pdwFlags | DWORD* | out | 0 個以上のフラグをビット単位の OR で結合した結果を格納する DWORD 変数へのポインターを指定します。これらのフラグは、2 つのメディアタイプ間の類似度を示します。次の表に、サポートされるフラグを示します。
|
戻り値
IsEqual メソッドは、成功した場合は S_OK を返し、それ以外の場合は次の表に示す HRESULT 値のいずれかを返します。
| 戻り値 | 説明 |
|---|---|
| 一方のメディアタイプが無効であるか、両方のメディアタイプが無効です。 | |
| メディアタイプが等しくありません。メディアタイプがどのように異なるかを判断するには、pdwFlags パラメーターを調べてください。 |
解説(Remarks)
両方のメディアタイプにメジャータイプが設定されている必要があり、そうでない場合、メソッドは E_INVALIDARG を返します。メディアタイプの詳細については、「Media Types」を参照してください。
MF_MEDIATYPE_EQUAL_FORMAT_DATA フラグは、両方のメディアタイプに互換性のある属性があることを示しますが、一方が他方のスーパーセットである場合があります。この比較方法により、部分的にしか指定されていないメディアタイプを、完全なメディアタイプと比較できます。たとえば、同じ形式を記述する 2 つのビデオタイプがあり、一方のタイプには拡張された色情報(クロマサイティング、公称範囲など)の属性が含まれている、といった場合です。
メソッドが成功し、すべての比較フラグが pdwFlags に設定されている場合、戻り値は S_OK になります。メソッドが成功しても一部の比較フラグが設定されていない場合、メソッドは S_FALSE を返します。
GetAudioFormat メソッドは、オーディオデータ形式の WAVEFORMATEX 構造体を返します。
戻り値
GetAudioFormat メソッドは、WAVEFORMATEX 構造体へのポインターを返します。
解説(Remarks)
返されるポインターは、IAudioMediaType インターフェイスが参照されている間のみ有効です。
IAudioMediaType::GetUncompressedAudioFormat は、オーディオデータ形式に関する情報を返します。
| pUncompressedAudioFormat | UNCOMPRESSEDAUDIOFORMAT* | out | UNCOMPRESSEDAUDIOFORMAT 構造体へのポインターを指定します。 |
戻り値
GetUncompressedAudioFormat メソッドは、成功した場合は S_OK を返します。それ以外の場合は、エラーコードを返します。
解説(Remarks)
返される情報は、非圧縮形式に対して有用です。ただし、このメソッド呼び出しは圧縮形式に対しても成功します。圧縮オーディオデータ形式に対してこの関数を呼び出す場合は、返された情報が対象の圧縮形式に適用できるかどうかを判断する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IAudioMediaType "{4E997F73-B71F-4798-873B-ED7DFCF15B4D}" #usecom global IAudioMediaType IID_IAudioMediaType "{}" #comfunc global IAudioMediaType_IsCompressedFormat 3 var #comfunc global IAudioMediaType_IsEqual 4 sptr,var #comfunc global IAudioMediaType_GetAudioFormat 5 #comfunc global IAudioMediaType_GetUncompressedAudioFormat 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IAudioMediaType "{4E997F73-B71F-4798-873B-ED7DFCF15B4D}" #usecom global IAudioMediaType IID_IAudioMediaType "{}" #comfunc global IAudioMediaType_IsCompressedFormat 3 sptr #comfunc global IAudioMediaType_IsEqual 4 sptr,sptr #comfunc global IAudioMediaType_GetAudioFormat 5 #comfunc global IAudioMediaType_GetUncompressedAudioFormat 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。