170 похожих чатов

Приветствую! Хочу поменять частоту дискретизации аудиоустройства Скажите, пожалуйста, что я делаю не

так?



#define INITGUID
#include <MMDeviceAPI.h>
#include <endpointvolume.h>
#include <audioclient.h>
#include <Functiondiscoverykeys_devpkey.h>
#include <locale.h>
#include <string>
#include <iostream>


#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "strmiids.lib")
#pragma comment(lib, "quartz.lib")
#pragma comment(lib, "uuid.lib")

int changer()
{
setlocale(LC_ALL, "Russian");

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) { printf("CoInitialize fail: HRESULT 0x%x", hr); return 1; }

IMMDeviceEnumerator* deviceEnumerator = NULL;
IMMDeviceCollection* deviceCollection = NULL;
IMMDevice* dev = NULL;
IPropertyStore* propertyStore = NULL;
WAVEFORMATEX wex, newWex; //буфер для данных о формате

WAVEFORMATEX pcmWaveFormat;

DWORD dwMode = STGM_READWRITE;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&deviceEnumerator));
if (FAILED(hr)) { printf("CoCreateInstance fail: HRESULT 0x%x", hr); goto End; }
hr = deviceEnumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &deviceCollection);
if (FAILED(hr)) { printf("EnumAudioEndpoints fail: HRESULT 0x%x", hr); goto End; }

UINT deviceCount;
hr = deviceCollection->GetCount(&deviceCount);
if (FAILED(hr)) { printf("GetCount fail: HRESULT 0x%x", hr); goto End; }

for (UINT DeviceIndex = 0; DeviceIndex < deviceCount; DeviceIndex++)
{

PROPVARIANT format, newFormat{}, checkFormat;
deviceCollection->Item(DeviceIndex, &dev);


if (DeviceIndex != 0) { goto Next; }

if (FAILED(hr)) { printf("Item fail: 0x%x\n", hr); goto Next; }

hr = dev->OpenPropertyStore(dwMode, &propertyStore);
if (FAILED(hr)) { printf("Can't open property store: HRESULT 0x%x", hr); goto Next; }

PROPVARIANT friendlyName;
PropVariantInit(&friendlyName);
hr = propertyStore->GetValue(PKEY_Device_FriendlyName, &friendlyName);
if (FAILED(hr)) { printf("Can't get device name: HRESULT 0x%x", hr); goto Next; }

PropVariantInit(&format);
PropVariantInit(&checkFormat);

hr = propertyStore->GetValue(PKEY_AudioEngine_DeviceFormat, &format);
if (FAILED(hr)) { printf("Can't get format: HRESULT 0x%x", hr); goto Next; }

memcpy_s(&wex, sizeof(wex), format.blob.pBlobData, sizeof(wex)); //копировать данные формата в буфер


pcmWaveFormat.wFormatTag = 0x0000FFFE;
pcmWaveFormat.nChannels = 2;
pcmWaveFormat.nSamplesPerSec = 32000L;
pcmWaveFormat.nAvgBytesPerSec = 128000L;
pcmWaveFormat.nBlockAlign = 4;
pcmWaveFormat.wBitsPerSample = 16;
pcmWaveFormat.cbSize = 22;

newFormat = format;
PropVariantClear(&format);
newFormat.vt = VT_BLOB;
newFormat.blob.cbSize = sizeof(wex);
newFormat.blob.pBlobData = (BYTE*)&wex;
hr = propertyStore->SetValue(PKEY_AudioEngine_DeviceFormat, newFormat);
if (FAILED(hr)) { printf("Can't set format: HRESULT 0x%x", hr); goto Next; }

hr = propertyStore->GetValue(PKEY_AudioEngine_DeviceFormat, &checkFormat);
if (FAILED(hr)) { printf("Can't get format: HRESULT 0x%x", hr); goto Next; }

// Вывод нового значения
memcpy_s(&newWex, sizeof(newWex), checkFormat.blob.pBlobData, sizeof(newWex));
PropVariantClear(&checkFormat);
std::cout << "New Frequency: " << newWex.nSamplesPerSec << std::endl;


Next:
if (dev != NULL) { dev->Release(); dev = NULL; }
if (propertyStore != NULL) { propertyStore->Release(); propertyStore = NULL; }

}

End:
if (dev != NULL) { dev->Release(); dev = NULL; }
if (propertyStore != NULL) { propertyStore->Release(); propertyStore = NULL; }
if (deviceEnumerator != NULL) { deviceEnumerator->Release(); deviceEnumerator = NULL; }
if (deviceCollection != NULL) { deviceCollection->Release(); deviceCollection = NULL; }

CoUninitialize();
return 0;
}

2 ответов

6 просмотров

например не читаешь описание чата, и кросспостишь во все чаты подряд

Ivan- Автор вопроса
Denis P
например не читаешь описание чата, и кросспостишь ...

Отправил сюда и в винапи чат. Правила сейчас прочитал, с этим действительно упущение.

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Доброе утро! Не совсем понятно как установить счетчик яндекс метрики на сайт. И потом ещё цели проставить?
Евгения
18
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Кто-нибудь знает, как считается нагрузка на цпу? И что такое вообще "нагрузка на цпу"? вот, например, есть у цпу какой-то clock, настроенный на 3 ГГц --- Что значит "нагрузка...
Toideng
15
Можно ли написать свою библиотеку "socket" на каком либо языке ассемблера с нуля не используя сишние библиотеки ? Или это самоубийство ?
123🪐
15
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
PopOs or Linux Mint for a noob starter? Also do you have any articles on how to safely dual boot Windows 10 alongside it? I've heard there are a bunch problems that can occur...
Senator
16
Карта сайта