mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-02-02 03:20:06 +00:00
Windows: Always use requested sample rate when opening a WASAPI device with sample rate conversion enabled
This commit is contained in:
parent
1870e2d5fd
commit
99b3d85fcc
1 changed files with 16 additions and 6 deletions
|
|
@ -681,10 +681,10 @@ private:
|
|||
WAVEFORMATEX* nearestFormat = nullptr;
|
||||
|
||||
if (SUCCEEDED (audioClient->IsFormatSupported (isExclusiveMode (deviceMode) ? AUDCLNT_SHAREMODE_EXCLUSIVE
|
||||
: AUDCLNT_SHAREMODE_SHARED,
|
||||
: AUDCLNT_SHAREMODE_SHARED,
|
||||
(WAVEFORMATEX*) &format,
|
||||
isExclusiveMode (deviceMode) ? nullptr
|
||||
: (WAVEFORMATEX**) &nearestFormat)))
|
||||
: &nearestFormat)))
|
||||
{
|
||||
if (nearestFormat != nullptr)
|
||||
rate = nearestFormat->nSamplesPerSec;
|
||||
|
|
@ -728,20 +728,30 @@ private:
|
|||
format.SubFormat = sampleFormat.useFloat ? KSDATAFORMAT_SUBTYPE_IEEE_FLOAT : KSDATAFORMAT_SUBTYPE_PCM;
|
||||
format.dwChannelMask = newMixFormatChannelMask;
|
||||
|
||||
WAVEFORMATEXTENSIBLE* nearestFormat = nullptr;
|
||||
WAVEFORMATEX* nearestFormat = nullptr;
|
||||
|
||||
HRESULT hr = clientToUse->IsFormatSupported (isExclusiveMode (deviceMode) ? AUDCLNT_SHAREMODE_EXCLUSIVE
|
||||
: AUDCLNT_SHAREMODE_SHARED,
|
||||
(WAVEFORMATEX*) &format,
|
||||
isExclusiveMode (deviceMode) ? nullptr
|
||||
: (WAVEFORMATEX**) &nearestFormat);
|
||||
: &nearestFormat);
|
||||
logFailure (hr);
|
||||
|
||||
auto supportsSRC = supportsSampleRateConversion (deviceMode);
|
||||
|
||||
if (hr == S_FALSE
|
||||
&& nearestFormat != nullptr
|
||||
&& format.Format.nSamplesPerSec == nearestFormat->Format.nSamplesPerSec)
|
||||
&& (format.Format.nSamplesPerSec == nearestFormat->nSamplesPerSec
|
||||
|| supportsSRC))
|
||||
{
|
||||
copyWavFormat (format, (const WAVEFORMATEX*) nearestFormat);
|
||||
copyWavFormat (format, nearestFormat);
|
||||
|
||||
if (supportsSRC)
|
||||
{
|
||||
format.Format.nSamplesPerSec = (DWORD) newSampleRate;
|
||||
format.Format.nAvgBytesPerSec = (DWORD) (format.Format.nSamplesPerSec * format.Format.nBlockAlign);
|
||||
}
|
||||
|
||||
hr = S_OK;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue