DMO として機能するプラグインを使用して、Windows Media Player 用のオーディオ DSP プラグインを作成しています。WMP にオーディオ データをモノラル 22.050 khz オーディオで送信させようとしています。ただし、何をしても、プレーヤーはすべてのオーディオをステレオ 44.1k データに再サンプリングします。再生しているファイルが 22.050khz の wave ファイルであっても、プラグインで 44.1 オーディオを取得します。
プラグインがGetInputType/GetOutputType関数を介して処理できるデータを指定しますが、呼び出されるまでに何が起こってもSetInputType/SetOutputType、フォーマットは 44.1k に戻ります。誰が何が起こっているのか考えていますか? 必要なサンプルレートのみを受け入れるように書いValidateMediaTypeてみましたが、データがまったく得られません。私のGetInputType機能は以下です
STDMETHODIMP CWMPIPSpeaker::GetInputType (
DWORD dwInputStreamIndex,
DWORD dwTypeIndex,
DMO_MEDIA_TYPE *pmt)
{
HRESULT hr = S_OK;
if ( 0 != dwInputStreamIndex )
{
return DMO_E_INVALIDSTREAMINDEX ;
}
// only support one preferred type
if ( 0 != dwTypeIndex )
{
return DMO_E_NO_MORE_ITEMS;
}
if ( NULL == pmt )
{
return E_POINTER;
}
hr = MoInitMediaType(pmt, sizeof( WAVEFORMATEX ) );
WAVEFORMATEX* format = ((WAVEFORMATEX*)pmt->pbFormat);
format->nChannels = 1;
format->nSamplesPerSec = 22050;
format->wFormatTag = WAVE_FORMAT_PCM;
format->wBitsPerSample = 16;
format->cbSize = 0;
format->nBlockAlign = (format->nChannels * format->wBitsPerSample) / 8;
format->nAvgBytesPerSec = format->nBlockAlign * format->nSamplesPerSec;
pmt->formattype = FORMAT_WaveFormatEx;
pmt->lSampleSize = format->nBlockAlign;
pmt->bFixedSizeSamples = true;
pmt->majortype = MEDIATYPE_Audio;
pmt->subtype = MEDIASUBTYPE_PCM;
return hr;
}