Skip to content

Commit 29f0b79

Browse files
committed
debug(audio): Print buffer sizes and sample rate.
1 parent 77a85c4 commit 29f0b79

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

VisualPinball.Engine.PinMAME.Unity/Editor/PinMameGamelogicEngineInspector.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public override void OnInspectorGUI()
143143
private void CreateDisplays(IEnumerable<DisplayAuthoring> sceneDisplays)
144144
{
145145
// retrieve layouts from pinmame
146-
var pinMame = PinMame.PinMame.Instance();
146+
var pinMame = PinMame.PinMame.Instance(AudioSettings.outputSampleRate);
147147
var displayLayouts = pinMame.GetAvailableDisplays(_gle.romId);
148148

149149
// retrieve already existing displays from scene

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

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,16 @@
2121
using System;
2222
using System.Collections.Generic;
2323
using System.IO;
24+
using System.Diagnostics;
25+
using System.IO;
2426
using System.Linq;
2527
using System.Runtime.InteropServices;
2628
using NLog;
2729
using PinMame;
2830
using UnityEngine;
2931
using VisualPinball.Engine.Game.Engines;
3032
using VisualPinball.Unity;
33+
using Debug = UnityEngine.Debug;
3134
using Logger = NLog.Logger;
3235

3336
namespace VisualPinball.Engine.PinMAME
@@ -99,7 +102,12 @@ public GamelogicEngineLamp[] AvailableLamps {
99102
private PinMameAudioInfo _audioInfo;
100103
private float[] _lastAudioFrame = {};
101104
private int _lastAudioFrameOffset;
102-
private int _maximalQueueSize = 100;
105+
private const int _maximalQueueSize = 10;
106+
107+
private double _audioInputStart;
108+
private double _audioOutputStart;
109+
private int _audioNumSamplesInput;
110+
private int _audioNumSamplesOutput;
103111

104112
private void Awake()
105113
{
@@ -121,7 +129,8 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
121129
OnLampChanged?.Invoke(this, new LampEventArgs(lamp.Id, 0));
122130
}
123131

124-
_pinMame = PinMame.PinMame.Instance();
132+
Logger.Info($"New PinMAME instance at {(double)AudioSettings.outputSampleRate / 1000}kHz");
133+
_pinMame = PinMame.PinMame.Instance(AudioSettings.outputSampleRate);
125134
_pinMame.OnGameStarted += GameStarted;
126135
_pinMame.OnGameEnded += GameEnded;
127136
_pinMame.OnDisplayUpdated += DisplayUpdated;
@@ -268,6 +277,15 @@ private int OnAudioUpdated(IntPtr framePtr, int frameSize)
268277
return _audioInfo.SamplesPerFrame;
269278
}
270279

280+
_audioNumSamplesInput += frameSize;
281+
if (_audioNumSamplesInput > 100000) {
282+
var delta = AudioSettings.dspTime - _audioInputStart;
283+
var queueMs = System.Math.Round(_audioQueue.Count * (double)_audioInfo.SamplesPerFrame / _audioInfo.SampleRate * 1000);
284+
Debug.Log($"INPUT: {System.Math.Round(_audioNumSamplesInput / delta)} - {_audioQueue.Count} in queue ({queueMs}ms)");
285+
_audioInputStart = AudioSettings.dspTime;
286+
_audioNumSamplesInput = 0;
287+
}
288+
271289
float[] frame;
272290
if (_audioFilterChannels == _audioInfo.Channels) { // n channels -> n channels
273291
frame = new float[frameSize];
@@ -311,12 +329,26 @@ private int OnAudioUpdated(IntPtr framePtr, int frameSize)
311329

312330
private void OnAudioFilterRead(float[] data, int channels)
313331
{
332+
_audioNumSamplesOutput += data.Length / channels;
333+
if (_audioNumSamplesOutput > 100000) {
334+
var delta = AudioSettings.dspTime - _audioOutputStart;
335+
Debug.Log($"OUTPUT: {System.Math.Round(_audioNumSamplesOutput / delta)}");
336+
_audioOutputStart = AudioSettings.dspTime;
337+
_audioNumSamplesOutput = 0;
338+
}
339+
314340
if (_audioFilterChannels == 0) {
315341
_audioFilterChannels = channels;
316342
Logger.Info($"Creating audio on {channels} channels.");
317343
return;
318344
}
319345

346+
if (_audioQueue.Count == 0) {
347+
Logger.Error("Filtering audio but nothing to de-queue.");
348+
return;
349+
}
350+
351+
320352
const int size = sizeof(float);
321353
var dataOffset = 0;
322354
var lastFrameSize = _lastAudioFrame.Length - _lastAudioFrameOffset;

0 commit comments

Comments
 (0)