Skip to content

Commit 2e74dba

Browse files
committed
audio: Count offset instead of remaining.
1 parent fb1e05c commit 2e74dba

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

VisualPinball.Engine.PinMAME.Unity/Runtime/PinMameGamelogicEngine.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -289,34 +289,33 @@ private int OnAudioUpdated(IntPtr framePtr, int frameSize)
289289

290290
private void OnAudioFilterRead(float[] data, int channels)
291291
{
292-
var remaining = data.Length;
292+
var dataOffset = 0;
293293
var lastFrameSize = _lastAudioFrame.Length - _lastAudioFrameOffset;
294-
if (remaining >= lastFrameSize) {
295-
Buffer.BlockCopy(_lastAudioFrame, _lastAudioFrameOffset, data, 0, lastFrameSize);
296-
remaining -= lastFrameSize;
294+
if (data.Length >= lastFrameSize) {
295+
Buffer.BlockCopy(_lastAudioFrame, _lastAudioFrameOffset, data, dataOffset, lastFrameSize);
296+
dataOffset += lastFrameSize;
297297
_lastAudioFrame = new float[0];
298298
_lastAudioFrameOffset = 0;
299299

300300
lock (_audioQueue) {
301-
while (remaining > 0 && _audioQueue.Count > 0) {
301+
while (dataOffset < data.Length && _audioQueue.Count > 0) {
302302
var frame = _audioQueue.Dequeue();
303-
if (frame.Length <= remaining) {
304-
Buffer.BlockCopy(frame, 0, data, data.Length - remaining, frame.Length);
305-
remaining -= frame.Length;
303+
if (frame.Length <= data.Length - dataOffset) {
304+
Buffer.BlockCopy(frame, 0, data, dataOffset, frame.Length);
305+
dataOffset += frame.Length;
306306

307307
} else {
308-
Buffer.BlockCopy(frame, 0, data, data.Length - remaining, remaining);
308+
Buffer.BlockCopy(frame, 0, data, dataOffset, data.Length - dataOffset);
309309
_lastAudioFrame = frame;
310-
_lastAudioFrameOffset = remaining;
311-
remaining = 0;
310+
_lastAudioFrameOffset = data.Length - dataOffset;
311+
dataOffset = data.Length;
312312
}
313313
}
314314
}
315315

316316
} else {
317-
Buffer.BlockCopy(_lastAudioFrame, _lastAudioFrameOffset, data, 0, remaining);
318-
_lastAudioFrameOffset += remaining;
319-
Logger.Info($"No audio de-queue, copied {remaining} from last frame ({_lastAudioFrame.Length - remaining}).");
317+
Buffer.BlockCopy(_lastAudioFrame, _lastAudioFrameOffset, data, 0, data.Length);
318+
_lastAudioFrameOffset += data.Length;
320319
}
321320
}
322321

0 commit comments

Comments
 (0)