none
IAudioClient 设置 采样频率(SampleRate) RRS feed

  • 问题

  • 我在做一个关于音频采样和播放的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的音频?


    别紧张,我不是什么好人。。。


    2015年7月16日 3:02

全部回复