Add get_input_mix_rate method
This commit is contained in:
parent
9f2cbf4b75
commit
aec78c782e
|
@ -9,56 +9,100 @@
|
|||
|
||||
namespace godot {
|
||||
|
||||
|
||||
void AudioProcessor::_bind_methods()
|
||||
{
|
||||
ClassDB::bind_method(D_METHOD("process"), &AudioProcessor::process);
|
||||
ClassDB::bind_method(D_METHOD("get_mix_rate"), &AudioProcessor::get_mix_rate);
|
||||
ClassDB::bind_method(D_METHOD("get_output_mix_rate"), &AudioProcessor::get_output_mix_rate);
|
||||
ClassDB::bind_method(D_METHOD("get_input_mix_rate"), &AudioProcessor::get_input_mix_rate);
|
||||
}
|
||||
|
||||
AudioProcessor::AudioProcessor()
|
||||
{
|
||||
HRESULT hr;
|
||||
HRESULT hr;
|
||||
|
||||
CoInitialize(NULL);
|
||||
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&m_deviceEnumerator);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to create device enumerator" << std::endl;
|
||||
return;
|
||||
}
|
||||
CoInitialize(NULL);
|
||||
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&m_deviceEnumerator);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to create device enumerator" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
hr = m_deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &m_defaultDevice);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to get default audio device" << std::endl;
|
||||
m_deviceEnumerator->Release();
|
||||
return;
|
||||
}
|
||||
// Initialize default output device
|
||||
hr = m_deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &m_defaultOutputDevice);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to get default output audio device" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
hr = m_defaultDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&m_audioClient);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to activate audio client" << std::endl;
|
||||
m_defaultDevice->Release();
|
||||
m_deviceEnumerator->Release();
|
||||
return;
|
||||
}
|
||||
hr = m_defaultOutputDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&m_outputAudioClient);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to activate output audio client" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
hr = m_audioClient->GetMixFormat(&m_pwfx);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to get mix format" << std::endl;
|
||||
m_audioClient->Release();
|
||||
m_defaultDevice->Release();
|
||||
m_deviceEnumerator->Release();
|
||||
return;
|
||||
}
|
||||
hr = m_outputAudioClient->GetMixFormat(&m_outputMixFormat);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to get output mix format" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize default input device
|
||||
hr = m_deviceEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &m_defaultInputDevice);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to get default input audio device" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
hr = m_defaultInputDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&m_inputAudioClient);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to activate input audio client" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
hr = m_inputAudioClient->GetMixFormat(&m_inputMixFormat);
|
||||
if (FAILED(hr)) {
|
||||
std::cerr << "Failed to get input mix format" << std::endl;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
AudioProcessor::~AudioProcessor()
|
||||
{
|
||||
CoTaskMemFree(m_pwfx);
|
||||
m_audioClient->Release();
|
||||
m_defaultDevice->Release();
|
||||
AudioProcessor::~AudioProcessor() {
|
||||
if (m_outputMixFormat != nullptr) {
|
||||
CoTaskMemFree(m_outputMixFormat);
|
||||
m_outputMixFormat = nullptr;
|
||||
}
|
||||
|
||||
if (m_outputAudioClient != nullptr) {
|
||||
m_outputAudioClient->Release();
|
||||
m_outputAudioClient = nullptr;
|
||||
}
|
||||
|
||||
if (m_defaultOutputDevice != nullptr) {
|
||||
m_defaultOutputDevice->Release();
|
||||
m_defaultOutputDevice = nullptr;
|
||||
}
|
||||
|
||||
if (m_inputMixFormat != nullptr) {
|
||||
CoTaskMemFree(m_inputMixFormat);
|
||||
m_inputMixFormat = nullptr;
|
||||
}
|
||||
|
||||
if (m_inputAudioClient != nullptr) {
|
||||
m_inputAudioClient->Release();
|
||||
m_inputAudioClient = nullptr;
|
||||
}
|
||||
|
||||
if (m_defaultInputDevice != nullptr) {
|
||||
m_defaultInputDevice->Release();
|
||||
m_defaultInputDevice = nullptr;
|
||||
}
|
||||
|
||||
if (m_deviceEnumerator != nullptr) {
|
||||
m_deviceEnumerator->Release();
|
||||
CoUninitialize();
|
||||
m_deviceEnumerator = nullptr;
|
||||
}
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
|
||||
void AudioProcessor::process()
|
||||
|
@ -66,9 +110,13 @@ void AudioProcessor::process()
|
|||
|
||||
}
|
||||
|
||||
size_t AudioProcessor::get_mix_rate() const
|
||||
size_t AudioProcessor::get_output_mix_rate() const
|
||||
{
|
||||
return m_pwfx->nSamplesPerSec;
|
||||
return m_outputMixFormat->nSamplesPerSec;
|
||||
}
|
||||
|
||||
size_t AudioProcessor::get_input_mix_rate() const {
|
||||
return m_inputMixFormat->nSamplesPerSec;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -22,13 +22,19 @@ public:
|
|||
~AudioProcessor();
|
||||
|
||||
void process();
|
||||
size_t get_mix_rate() const;
|
||||
|
||||
size_t get_input_mix_rate() const;
|
||||
size_t get_output_mix_rate() const;
|
||||
|
||||
private:
|
||||
IMMDeviceEnumerator *m_deviceEnumerator{};
|
||||
IMMDevice *m_defaultDevice{};
|
||||
IAudioClient *m_audioClient{};
|
||||
WAVEFORMATEX *m_pwfx{};
|
||||
IMMDeviceEnumerator* m_deviceEnumerator = nullptr;
|
||||
IMMDevice* m_defaultOutputDevice = nullptr;
|
||||
IAudioClient* m_outputAudioClient = nullptr;
|
||||
WAVEFORMATEX* m_outputMixFormat = nullptr;
|
||||
|
||||
IMMDevice* m_defaultInputDevice = nullptr;
|
||||
IAudioClient* m_inputAudioClient = nullptr;
|
||||
WAVEFORMATEX* m_inputMixFormat = nullptr;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue