如何获得Windowsaudio播放的当前采样率?

我正在使用Windows waveOut API(又名MME或多媒体扩展)mmsystem.h。 某些程序改变了audio重放采样率(例如从44.1kHz到48kHz),这对我的程序检测当前重放采样率非常有用,所以它可以警告用户Windows将重新采样程序的输出。

根据此文档http://msdn.microsoft.com/en-us/library/aa909811.aspx,waveOutGetPlaybackRate返回设备当前正在执行的重采样%(例如,设备以44.1播放,而程序以44.1播放audio所以它会返回1.0)。 我很好奇,如果有一种方法来获得设备的绝对采样率,而不是相对的东西。 在Windows Vista / 7/8中,您可以通过以下方式手动查找该值:控制面板>声音>播放,右键单击默认播放设备并select属性,然后select高级选项卡。 所以我试图通过查询操作系统来获得这里的“默认格式”值。

有问题的程序是用Pascal编写的,但是我通常使用C / C ++引用。

Solutions Collecting From Web of "如何获得Windowsaudio播放的当前采样率?"

//#include <iostream> //#include <initguid.h> //#include <Mmdeviceapi.h> int main() { HRESULT hr; IMMDevice * pDevice = NULL; IMMDeviceEnumerator * pEnumerator = NULL; IPropertyStore* store = nullptr; PWAVEFORMATEX deviceFormatProperties; PROPVARIANT prop; CoInitialize(NULL); // get the device enumerator hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (LPVOID *)&pEnumerator); // get default audio endpoint hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice); hr = pDevice->OpenPropertyStore(STGM_READ, &store); if (FAILED(hr)) { std::cout << "OpenPropertyStore failed!" << std::endl; } hr = store->GetValue(PKEY_AudioEngine_DeviceFormat, &prop); if (FAILED(hr)) { std::cout << "GetValue failed!" << std::endl; } deviceFormatProperties = (PWAVEFORMATEX)prop.blob.pBlobData; std::cout << "Channels = " << deviceFormatProperties->nChannels << std::endl; std::cout << "Sample rate = " << deviceFormatProperties->nSamplesPerSec << std::endl; std::cout << "Bit depth = " << deviceFormatProperties->wBitsPerSample << std::endl; system("pause"); return 0; }