Я пишу аудио-плагин DSP для Windows Media Player с плагином, действующим как DMO. Я пытаюсь получить WMP для отправки аудиоданных в моно 22.050 кГц аудио. Однако, независимо от того, что я делаю, плеер перепроверяет все аудио в стерео 44.1k данные. Даже если файл, который я играю, представляет собой 22,050 кГц волновой файл, я все равно получаю 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 кГц? –
Другая возможная причина заключается в том, что ваша DMO не единственная использующая WMP. Он имеет внутреннюю нормализацию объема, эффекты SRS и т. Д., Которые растут в цепочке, и они могут предпочесть переключиться на 44,1 кГц до того, как аудиоданные действительно достигнут вашей DMO. –
Я вернул код ошибки. Проблема оказалась самой WMP, но спасибо за предложения – Nate