IWMDMDevice を使用したフォーマット機能の取得
デバイスに対して再生機能のクエリを実行する場合に推奨される方法は、 IWMDMDevice3::GetFormatCapability です。 ただし、デバイスがこのメソッドをサポートしていない場合、アプリケーションは代わりに IWMDMDevice::GetFormatSupport を呼び出して、サポートされているオーディオ形式の配列を _WAVEFORMATEX 構造として取得し、MIME 形式をデバイスから文字列として取得できます。
次の手順では、アプリケーションでこのメソッドを使用して、サポートされている形式のデバイスに対してクエリを実行する方法を示します。
- GetFormatSupport を呼び出して、オーディオ形式と MIME 形式の両方の配列を取得します。
- 取得したオーディオ形式をループ処理し、各 _WAVEFORMATEX 構造を調べて、許容されるオーディオ形式を見つけようとします
- 取得した MIME 書式指定文字列 (必要な場合) をループ処理して、許容されるファイルの種類を見つけます。 SDK では、MIME 形式の定数は定義されていません。業界標準の値を使用する必要があります (iana.org Web サイトにあります)。 デバイスでは、サポートされている特定の MIME の種類を一覧表示する必要があります。
次の C++ コードは、 GetFormatSupport を使用してデバイスからフォーマット機能を取得する方法を示しています。
// Function to print out device caps for a device
// that supports only IWMDMDevice.
void CWMDMController::GetCaps(IWMDMDevice* pDevice)
{
HRESULT hr = S_OK;
// Get all capabilities for audio and mime support.
_WAVEFORMATEX* pAudioFormats;
LPWSTR* pMimeFormats;
UINT numAudioFormats = 0;
UINT numMimeFormats = 0;
hr = pDevice->GetFormatSupport(
&pAudioFormats,
&numAudioFormats,
&pMimeFormats,
&numMimeFormats);
if (FAILED(hr)) return;
// Print out audio format data.
if (numAudioFormats > 0)
{
// TODO: Display a banner for the supported audio-format listing.
}
else
{
// TODO: Display a message indicating that no audio formats are supported.
}
for (int i = 0; i < numAudioFormats; i++)
{
// TODO: For each valid audio format, display the max channel,
// max samples/second, avg. bytes/sec, block alignment, and
// max bits/sample values.
}
// Print out MIME formats.
if (numMimeFormats > 0)
// TODO: Display a banner to precede the MIME format listing.
else
// TODO: Display a banner indicating that no MIME formats are supported.
for (i = 0; i < numMimeFormats; i++)
{
// TODO: Display the specified MIME format.
}
return;
}
関連トピック