[PATCH 1/4] xaudio2: Implement IXAudio2SourceVoice frequency functions
Andrew Eikum
aeikum at codeweavers.com
Tue Sep 15 12:25:23 CDT 2015
---
dlls/xaudio2_7/xaudio_dll.c | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index ccbcd21..53c657c 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -147,7 +147,8 @@ typedef struct _XA2SourceImpl {
WAVEFORMATEX *fmt;
ALenum al_fmt;
- UINT32 submit_blocksize;
+ UINT32 submit_blocksize, freq;
+ float freq_ratio;
IXAudio2VoiceCallback *cb;
@@ -801,14 +802,26 @@ static HRESULT WINAPI XA2SRC_SetFrequencyRatio(IXAudio2SourceVoice *iface,
float Ratio, UINT32 OperationSet)
{
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+
TRACE("%p, %f, 0x%x\n", This, Ratio, OperationSet);
+
+ EnterCriticalSection(&This->lock);
+
+ This->freq_ratio = Ratio;
+ This->freq = This->fmt->nSamplesPerSec * Ratio;
+
+ LeaveCriticalSection(&This->lock);
+
return S_OK;
}
static void WINAPI XA2SRC_GetFrequencyRatio(IXAudio2SourceVoice *iface, float *pRatio)
{
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+
TRACE("%p, %p\n", This, pRatio);
+
+ *pRatio = This->freq_ratio;
}
static HRESULT WINAPI XA2SRC_SetSourceSampleRate(
@@ -816,7 +829,16 @@ static HRESULT WINAPI XA2SRC_SetSourceSampleRate(
UINT32 NewSourceSampleRate)
{
XA2SourceImpl *This = impl_from_IXAudio2SourceVoice(iface);
+
TRACE("%p, %u\n", This, NewSourceSampleRate);
+
+ EnterCriticalSection(&This->lock);
+
+ This->fmt->nSamplesPerSec = NewSourceSampleRate;
+ This->freq = NewSourceSampleRate * This->freq_ratio;
+
+ LeaveCriticalSection(&This->lock);
+
return S_OK;
}
@@ -1697,6 +1719,7 @@ static HRESULT WINAPI IXAudio2Impl_CreateSourceVoice(IXAudio2 *iface,
src->submit_blocksize = pSourceFormat->nBlockAlign;
src->fmt = copy_waveformat(pSourceFormat);
+ src->freq = src->fmt->nSamplesPerSec;
hr = XA2SRC_SetOutputVoices(&src->IXAudio2SourceVoice_iface, pSendList);
if(FAILED(hr)){
@@ -2989,7 +3012,7 @@ static BOOL xa2buffer_queue_period(XA2SourceImpl *src, XA2Buffer *buf, ALuint al
buf->offs_bytes += submit_bytes;
alBufferData(al_buf, src->al_fmt, submit_buf, submit_bytes,
- src->fmt->nSamplesPerSec);
+ src->freq);
alSourceQueueBuffers(src->al_src, 1, &al_buf);
--
2.5.1
More information about the wine-patches
mailing list