我正在爲Windows Media Player編寫一個音頻DSP插件,插件充當DMO。我試圖讓WMP向我發送單聲道22.050 kHz音頻的音頻數據。但是,無論我做什麼,播放器都會將所有音頻重新採樣爲立體聲44.1k數據。即使我正在播放的文件是22.050khz波形文件,我仍然會在插件中獲得44.1音頻。Windows Media Player DSP插件格式協商
我指定了我的插件可以通過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;
}
您是否在您的'SetInputType'中爲44.1 kHz格式返回錯誤代碼? – 2012-01-12 19:10:09
另一個可能的原因是您的DMO不是WMP使用的唯一一個。它具有內部音量標準化,SRS效果等等,它們可以在音頻數據實際到達DMO之前切換到44.1 kHz。 – 2012-01-12 19:24:27
我確實返回了錯誤代碼。問題最終成爲WMP本身,但感謝您的建議 – Nate 2012-01-12 20:24:31