Skip to content

Commit da46b1a

Browse files
committed
audio: Add API callbacks.
1 parent ab902f3 commit da46b1a

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace VisualPinball.Engine.PinMAME
3333
{
3434
[Serializable]
3535
[DisallowMultipleComponent]
36+
[RequireComponent(typeof(AudioSource))]
3637
[AddComponentMenu("Visual Pinball/Game Logic Engine/PinMAME")]
3738
public class PinMameGamelogicEngine : MonoBehaviour, IGamelogicEngine
3839
{
@@ -92,6 +93,8 @@ public GamelogicEngineLamp[] AvailableLamps {
9293

9394
private readonly Queue<Action> _dispatchQueue = new Queue<Action>();
9495

96+
private PinMameAudioInfo _audioInfo;
97+
9598
private void Start()
9699
{
97100
UpdateCaches();
@@ -110,6 +113,8 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
110113
_pinMame.OnDisplayUpdated += DisplayUpdated;
111114
_pinMame.OnSolenoidUpdated += SolenoidUpdated;
112115
_pinMame.OnDisplayAvailable += OnDisplayAvailable;
116+
_pinMame.OnAudioAvailable += OnAudioAvailable;
117+
_pinMame.OnAudioUpdated += OnAudioUpdated;
113118
_player = player;
114119

115120
try {
@@ -234,6 +239,23 @@ private void SolenoidUpdated(int internalId, bool isActive)
234239
}
235240
}
236241

242+
private int OnAudioAvailable(PinMameAudioInfo audioInfo)
243+
{
244+
Logger.Info("Game audio available: " + audioInfo);
245+
return audioInfo.SamplesPerFrame;
246+
}
247+
248+
private int OnAudioUpdated(IntPtr bufferPtr, int samples)
249+
{
250+
Logger.Info("Got audio sample: " + samples);
251+
return _audioInfo.SamplesPerFrame;
252+
}
253+
254+
private void OnAudioFilterRead(float[] data, int channels)
255+
{
256+
Logger.Info($"WRITE audio sample: {data.Length} ({channels})");
257+
}
258+
237259
private void GameEnded()
238260
{
239261
Logger.Info($"[PinMAME] Game ended.");
@@ -289,6 +311,9 @@ public void StopGame()
289311
_pinMame.OnGameEnded -= GameEnded;
290312
_pinMame.OnDisplayUpdated -= DisplayUpdated;
291313
_pinMame.OnSolenoidUpdated -= SolenoidUpdated;
314+
_pinMame.OnDisplayAvailable -= OnDisplayAvailable;
315+
_pinMame.OnAudioAvailable -= OnAudioAvailable;
316+
_pinMame.OnAudioUpdated -= OnAudioUpdated;
292317
}
293318
_frameBuffer.Clear();
294319
_dmdLevels.Clear();

0 commit comments

Comments
 (0)