我在做一个关于音频采样和播放的WP8 APP。想采集8KHz的声音,经过一系列的处理,然后在播放出来。
在调用采集器(Caputre)的时候,把频率设成8KHz没有什么问题,采集正常。但是在播放的时候,设置成8KHz,就一直报"AUDCLNT_E_UNSUPPORTED_FORMAT",代码如下:
WAVEFORMATEX* pFormat = nullptr;
WAVEFORMATEX format = {};
format.wFormatTag = WAVE_FORMAT_PCM;
format.nChannels = 1;
format.nSamplesPerSec = 8000;
format.wBitsPerSample = 16;
format.nBlockAlign = format.nChannels * (format.wBitsPerSample / 8);
format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign;
format.cbSize = 0;
*pFormat = format;
hr = m_pDefaultRender->Initialize(AUDCLNT_SHAREMODE_SHARED, 0x88140000, 2000 * 10000, 0, pFormat , NULL);
如果我把"wFormatTag" 设置成 "WAVE_FORMAT_EXTENSIBLE",同时"cbsize"设置成"22",又会报"E_INVALIDARG
One or more arguments are invalid".
通过调用"m_pDefaultRender->GetMixFormat"发现默认的采样频率为48KHz,"wFormatTag"为"WAVE_FORMAT_EXTENSIBLE" .
我在HTC 8X和Lumia 535两台手机上测试,都得到同样的结果,所以我想问:
1.设置不了Render的采样频率是不是因为硬件不支持 ?
2.如果不是硬件的问题,应该怎么设置Render的采样频率 ?
3.如果是硬件的问题,怎么在48KHz的Render里,正常播放8KHz的音频?
别紧张,我不是什么好人。。。