Hey Leute,
es ist soweit der gute @-Franky- hat es geschafft, der hat mich bekloppt gemacht(auf einer positiven Art) mit den ganzen COM Dingern und Interfaces. Nun will ich mal schauen wie man selbst Audio ohne extra Bibliothek abspielt(kein MCISendString oder wie das heist). Ich denke WASAPI ist das Stichwort, wo fange ich da an? (Abgesehen von Docs.microsoft)
Hab hier noch mal einiges editiert und entfernt, einiges ist nun klar. Das einzige Problem was nun noch besteht, wie hole ich mir die Interfaces in C#. WASAPI und die MMDevice-API sind keine Hürde, mehr aus gut Dokumentiert.
PS.
Hab es schon mal gebacken gekriegt Audio-Devices aufzulisten in C++. Wenn du @-Franky- oder jemand anders mir nun zeigen kann, wie ich das in C# umsetzen kann, habe ich schon den Grundstein. Den Rest schaffe ich dann mit docs.microsoft.
Ich habe die Konsolen-Projektmappe mal angehängt.
es ist soweit der gute @-Franky- hat es geschafft, der hat mich bekloppt gemacht(auf einer positiven Art) mit den ganzen COM Dingern und Interfaces. Nun will ich mal schauen wie man selbst Audio ohne extra Bibliothek abspielt(kein MCISendString oder wie das heist). Ich denke WASAPI ist das Stichwort, wo fange ich da an? (Abgesehen von Docs.microsoft)
Hab hier noch mal einiges editiert und entfernt, einiges ist nun klar. Das einzige Problem was nun noch besteht, wie hole ich mir die Interfaces in C#. WASAPI und die MMDevice-API sind keine Hürde, mehr aus gut Dokumentiert.
PS.
Hab es schon mal gebacken gekriegt Audio-Devices aufzulisten in C++. Wenn du @-Franky- oder jemand anders mir nun zeigen kann, wie ich das in C# umsetzen kann, habe ich schon den Grundstein. Den Rest schaffe ich dann mit docs.microsoft.
C-Quellcode
- #include <iostream>
- #include <Mmdeviceapi.h>
- #include "COMException.h"
- #include <propvarutil.h>
- #include <Functiondiscoverykeys_devpkey.h>
- using namespace std;
- const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
- const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
- IMMDeviceEnumerator* deviceEnumerator = nullptr;
- IMMDeviceCollection* deviceCollection = nullptr;
- IMMDevice* device = nullptr;
- IPropertyStore* propertyStore = nullptr;
- #define SafeRelease(ptr) if (ptr != nullptr) { ptr->Release(); ptr = nullptr; }
- int main()
- {
- ThrowIfFailed(CoInitialize(NULL), "");
- ThrowIfFailed(CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&deviceEnumerator), "");
- ThrowIfFailed(deviceEnumerator->EnumAudioEndpoints(EDataFlow::eRender, DEVICE_STATE_ACTIVE, &deviceCollection), "");
- UINT deviceCount = 0;
- ThrowIfFailed(deviceCollection->GetCount(&deviceCount), "");
- cout << "Deivces Found: " << deviceCount << endl;
- for (UINT i = 0; i < deviceCount; i++)
- {
- ThrowIfFailed(deviceCollection->Item(i, &device), "");
- ThrowIfFailed(device->OpenPropertyStore(STGM_READ, &propertyStore), "");
- PROPVARIANT deviceNamePropVariant;
- PropVariantInit(&deviceNamePropVariant);
- ThrowIfFailed(propertyStore->GetValue(PKEY_Device_FriendlyName, &deviceNamePropVariant), "");
- WCHAR friendlyDeviceName[128];
- PropVariantToString(deviceNamePropVariant, friendlyDeviceName, 128);
- PropVariantClear(&deviceNamePropVariant);
- wcout << i << ":" << friendlyDeviceName << endl;
- SafeRelease(propertyStore);
- SafeRelease(device);
- }
- SafeRelease(deviceCollection);
- SafeRelease(deviceEnumerator);
- CoUninitialize();
- return 0;
- }
Ich habe die Konsolen-Projektmappe mal angehängt.
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „BitBrösel“ ()