c – 如何获得Windows音频播放的当前采样率?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 如何获得Windows音频播放的当前采样率?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1786字,纯文字阅读大概需要3分钟。
内容图文
![c – 如何获得Windows音频播放的当前采样率?](/upload/InfoBanner/zyjiaocheng/954/41fa9f26d1d44c71925e2c10bdb29343.jpg)
我正在使用Windows waveOut API(又名MME或多媒体扩展)mmsystem.h.有些程序会改变音频播放采样率(例如从44.1kHz到48kHz),这对我的程序检测当前播放采样率非常有用,因此它可以警告用户Windows将重新采样程序的输出.
根据此文档http://msdn.microsoft.com/en-us/library/aa909811.aspx,waveOutGetPlaybackRate返回设备当前正在执行的重采样%(例如,设备在44.1播放,程序在44.1播放音频,因此它将返回1.0).我很好奇是否有办法获得设备的绝对采样率,而不是相对的.在Windows Vista / 7/8中,您将通过以下方式手动查找此值:
控制面板>声音>单击“播放”,右键单击默认播放设备,选择“属性”,然后选择“高级”选项卡.因此,我试图通过查询操作系统来获取此处的“默认格式”值.
有问题的程序是用Pascal编写的,但是,我通常使用C/C++引用.
解决方法:
//#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;
}
内容总结
以上是互联网集市为您收集整理的c – 如何获得Windows音频播放的当前采样率?全部内容,希望文章能够帮你解决c – 如何获得Windows音频播放的当前采样率?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。