Audaspace
1.9.0
A high level audio library.
Toggle main menu visibility
Loading...
Searching...
No Matches
wasapi
WASAPIDevice.h
Go to the documentation of this file.
1
/*******************************************************************************
2
* Copyright 2009-2016 Jörg Müller
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
******************************************************************************/
16
17
#pragma once
18
19
#ifdef WASAPI_PLUGIN
20
#define AUD_BUILD_PLUGIN
21
#endif
22
28
29
#include "
devices/ThreadedDevice.h
"
30
31
#include <thread>
32
33
#include <windows.h>
34
#include <audioclient.h>
35
#include <mmdeviceapi.h>
36
#include <mmreg.h>
37
#include <wrl/client.h>
38
39
AUD_NAMESPACE_BEGIN
40
41
using
Microsoft::WRL::ComPtr;
42
46
class
AUD_PLUGIN_API
WASAPIDevice : IMMNotificationClient,
public
ThreadedDevice
47
{
48
private
:
49
int
m_buffersize;
50
ComPtr<IMMDeviceEnumerator> m_imm_device_enumerator;
51
ComPtr<IMMDevice> m_imm_device;
52
ComPtr<IAudioClient> m_audio_client;
53
WAVEFORMATEXTENSIBLE m_wave_format_extensible;
54
bool
m_default_device_changed;
55
LONG m_reference_count;
56
57
AUD_LOCAL
HRESULT setupRenderClient(IAudioRenderClient*& render_client, UINT32& buffer_size);
58
62
AUD_LOCAL
void
runMixingThread();
63
64
AUD_LOCAL
bool
setupDevice(
DeviceSpecs
& specs);
65
66
// IUnknown implementation
67
ULONG STDMETHODCALLTYPE AddRef();
68
ULONG STDMETHODCALLTYPE Release();
69
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid,
void
**ppvObject);
70
// IMMNotificationClient implementation
71
HRESULT STDMETHODCALLTYPE OnDeviceStateChanged(LPCWSTR pwstrDeviceId, DWORD dwNewState);
72
HRESULT STDMETHODCALLTYPE OnDeviceAdded(LPCWSTR pwstrDeviceId);
73
HRESULT STDMETHODCALLTYPE OnDeviceRemoved(LPCWSTR pwstrDeviceId);
74
HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR pwstrDeviceId);
75
HRESULT STDMETHODCALLTYPE OnPropertyValueChanged(LPCWSTR pwstrDeviceId,
const
PROPERTYKEY key);
76
77
// delete copy constructor and operator=
78
WASAPIDevice(
const
WASAPIDevice&) =
delete
;
79
WASAPIDevice& operator=(
const
WASAPIDevice&) =
delete
;
80
81
public
:
89
WASAPIDevice
(
DeviceSpecs
specs,
int
buffersize =
AUD_DEFAULT_BUFFER_SIZE
);
90
94
virtual
~WASAPIDevice
();
95
99
static
void
registerPlugin
();
100
};
101
102
AUD_NAMESPACE_END
AUD_DEFAULT_BUFFER_SIZE
#define AUD_DEFAULT_BUFFER_SIZE
The default playback buffer size of a device.
Definition
Audaspace.h:103
AUD_NAMESPACE_END
#define AUD_NAMESPACE_END
Closes the audaspace namespace aud.
Definition
Audaspace.h:119
AUD_LOCAL
#define AUD_LOCAL
Used for hiding symbols from export in the shared library.
Definition
Audaspace.h:80
AUD_NAMESPACE_BEGIN
#define AUD_NAMESPACE_BEGIN
Opens the audaspace namespace aud.
Definition
Audaspace.h:116
AUD_PLUGIN_API
#define AUD_PLUGIN_API
Used for exporting symbols in the shared library.
Definition
Audaspace.h:94
ThreadedDevice.h
The ThreadedDevice class.
WASAPIDevice::WASAPIDevice
WASAPIDevice(DeviceSpecs specs, int buffersize=AUD_DEFAULT_BUFFER_SIZE)
Opens the WASAPI audio device for playback.
WASAPIDevice::registerPlugin
static void registerPlugin()
Registers this plugin.
WASAPIDevice::~WASAPIDevice
virtual ~WASAPIDevice()
Closes the WASAPI audio device.
DeviceSpecs
Specification of a sound device.
Definition
Specification.h:129
Generated by
1.17.0