|
|
|
@@ -177,18 +177,24 @@ public: |
|
|
|
bufferStart = bufferEnd = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
const int stride = numChannels * sizeof (int16);
|
|
|
|
bool firstLoop = true;
|
|
|
|
|
|
|
|
while (numSamples > 0)
|
|
|
|
{
|
|
|
|
if (bufferEnd <= bufferStart)
|
|
|
|
{
|
|
|
|
INSSBuffer* sampleBuffer = nullptr;
|
|
|
|
ComSmartPtr<INSSBuffer> sampleBuffer;
|
|
|
|
QWORD sampleTime, duration;
|
|
|
|
DWORD flags, outputNum;
|
|
|
|
WORD streamNum;
|
|
|
|
int64 readBufferStart;
|
|
|
|
|
|
|
|
HRESULT hr = wmSyncReader->GetNextSample (0, &sampleBuffer, &sampleTime,
|
|
|
|
HRESULT hr = wmSyncReader->GetNextSample (1, sampleBuffer.resetAndGetPointerAddress(), &sampleTime,
|
|
|
|
&duration, &flags, &outputNum, &streamNum);
|
|
|
|
|
|
|
|
readBufferStart = (int64)floor((sampleTime * sampleRate) * 0.0000001);
|
|
|
|
|
|
|
|
if (sampleBuffer != nullptr)
|
|
|
|
{
|
|
|
|
BYTE* rawData = nullptr;
|
|
|
|
@@ -206,7 +212,15 @@ public: |
|
|
|
|
|
|
|
buffer.ensureSize (bufferEnd);
|
|
|
|
memcpy (buffer.getData(), rawData, bufferEnd);
|
|
|
|
sampleBuffer->Release();
|
|
|
|
|
|
|
|
if (firstLoop && readBufferStart < startSampleInFile)
|
|
|
|
{
|
|
|
|
bufferStart += (startSampleInFile - readBufferStart) * stride;
|
|
|
|
|
|
|
|
if (bufferStart > bufferEnd)
|
|
|
|
bufferStart = bufferEnd;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
@@ -215,9 +229,11 @@ public: |
|
|
|
buffer.ensureSize (bufferEnd);
|
|
|
|
buffer.fillWith (0);
|
|
|
|
}
|
|
|
|
|
|
|
|
firstLoop = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
const int stride = numChannels * sizeof (int16);
|
|
|
|
|
|
|
|
const int16* const rawData = static_cast <const int16*> (addBytesToPointer (buffer.getData(), bufferStart));
|
|
|
|
const int numToDo = jmin (numSamples, (bufferEnd - bufferStart) / stride);
|
|
|
|
|
|
|
|
@@ -237,6 +253,9 @@ public: |
|
|
|
}
|
|
|
|
|
|
|
|
bufferStart += numToDo * stride;
|
|
|
|
if (bufferEnd - bufferStart < stride)
|
|
|
|
bufferStart = bufferEnd;
|
|
|
|
|
|
|
|
startOffsetInDestBuffer += numToDo;
|
|
|
|
numSamples -= numToDo;
|
|
|
|
currentPosition += numToDo;
|
|
|
|
|