Skip to content

Commit ab3999c

Browse files
committed
Added 32-bit float format support
1 parent e191614 commit ab3999c

3 files changed

Lines changed: 27 additions & 7 deletions

File tree

Source/Driver/ASIO2WASAPI.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,15 @@ BOOL IsFormatSupported (IMMDevice* pDevice, WORD nChannels, DWORD nSampleRate, A
222222
waveFormat.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX);
223223
waveFormat.Samples.wValidBitsPerSample = waveFormat.Format.wBitsPerSample;
224224
waveFormat.dwChannelMask = dwChannelMask;
225-
waveFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
225+
//test native support for 32-bit float first
226+
waveFormat.SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
227+
228+
hr = pAudioClient->IsFormatSupported(shareMode, (WAVEFORMATEX*)&waveFormat, NULL);
229+
if (hr == S_OK)
230+
return TRUE;
231+
232+
//then try integer formats, first 32-bit int
233+
waveFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
226234

227235
hr = pAudioClient->IsFormatSupported(shareMode, (WAVEFORMATEX*)&waveFormat, NULL);
228236
if (hr == S_OK)
@@ -354,9 +362,18 @@ BOOL FindStreamFormat(IMMDevice * pDevice, int nChannels,int nSampleRate, int& n
354362
waveFormat.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
355363
waveFormat.Samples.wValidBitsPerSample=waveFormat.Format.wBitsPerSample;
356364
waveFormat.dwChannelMask = dwChannelMask;
357-
waveFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
365+
//test for native support for 32-bit float first
366+
waveFormat.SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
358367

359368
pAudioClient = getAudioClient(pDevice,(WAVEFORMATEX*)&waveFormat, nbufferSize);
369+
370+
if (pAudioClient)
371+
goto Finish;
372+
373+
//then try integer formats, first 32-bit int
374+
waveFormat.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
375+
376+
pAudioClient = getAudioClient(pDevice, (WAVEFORMATEX*)&waveFormat, nbufferSize);
360377

361378
if (pAudioClient)
362379
goto Finish;
@@ -418,17 +435,20 @@ STDMETHODIMP ASIO2WASAPI::NonDelegatingQueryInterface (REFIID riid, void ** ppv)
418435

419436
ASIOSampleType ASIO2WASAPI::getASIOSampleType() const
420437
{
438+
if (m_waveFormat.SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT) return ASIOSTFloat32LSB;
439+
421440
switch (m_waveFormat.Format.wBitsPerSample)
422441
{
423442
case 16: return ASIOSTInt16LSB;
424443
case 24: return ASIOSTInt24LSB;
425-
case 32:
426-
switch (m_waveFormat.Samples.wValidBitsPerSample)
444+
case 32: return ASIOSTInt32LSB;
445+
/* switch (m_waveFormat.Samples.wValidBitsPerSample)
427446
{
428447
case 32: return ASIOSTInt32LSB;
429448
case 24: return ASIOSTInt32LSB; //falco: In case of 24-bit data Windows simply chops the last 8 bits. No special alignment needed. ASIOSTInt32LSB24 is simply wrong.
430449
default: return ASIOSTLastEntry ;
431450
}
451+
*/
432452
default: return ASIOSTLastEntry;
433453
}
434454
}
@@ -636,7 +656,7 @@ BOOL CALLBACK ASIO2WASAPI::ControlPanelProc(HWND hwndDlg,
636656
}
637657

638658
wchar_t tmpBuff[8] = { 0 };
639-
for (UINT i = 2; i < 40; i = i + 2)
659+
for (UINT i = 2; i < 32; i += 2)
640660
{
641661
if (IsFormatSupported(pDevice, i, 48000, AUDCLNT_SHAREMODE_EXCLUSIVE))
642662
{

Source/Driver/ASIO2WASAPI.rc

0 Bytes
Binary file not shown.

Source/Driver/version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
#define PRODUCT_VERSION 1,1,6,0
2-
#define SPRODUCT_VERSION "1.1.6.0"
1+
#define PRODUCT_VERSION 1,1,7,0
2+
#define SPRODUCT_VERSION "1.1.7.0"

0 commit comments

Comments
 (0)