@@ -33,6 +33,7 @@ namespace VisualPinball.Engine.PinMAME
33
33
{
34
34
[ Serializable ]
35
35
[ DisallowMultipleComponent ]
36
+ [ RequireComponent ( typeof ( AudioSource ) ) ]
36
37
[ AddComponentMenu ( "Visual Pinball/Game Logic Engine/PinMAME" ) ]
37
38
public class PinMameGamelogicEngine : MonoBehaviour , IGamelogicEngine
38
39
{
@@ -92,6 +93,8 @@ public GamelogicEngineLamp[] AvailableLamps {
92
93
93
94
private readonly Queue < Action > _dispatchQueue = new Queue < Action > ( ) ;
94
95
96
+ private PinMameAudioInfo _audioInfo ;
97
+
95
98
private void Start ( )
96
99
{
97
100
UpdateCaches ( ) ;
@@ -110,6 +113,8 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
110
113
_pinMame . OnDisplayUpdated += DisplayUpdated ;
111
114
_pinMame . OnSolenoidUpdated += SolenoidUpdated ;
112
115
_pinMame . OnDisplayAvailable += OnDisplayAvailable ;
116
+ _pinMame . OnAudioAvailable += OnAudioAvailable ;
117
+ _pinMame . OnAudioUpdated += OnAudioUpdated ;
113
118
_player = player ;
114
119
115
120
try {
@@ -234,6 +239,23 @@ private void SolenoidUpdated(int internalId, bool isActive)
234
239
}
235
240
}
236
241
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
+
237
259
private void GameEnded ( )
238
260
{
239
261
Logger . Info ( $ "[PinMAME] Game ended.") ;
@@ -289,6 +311,9 @@ public void StopGame()
289
311
_pinMame . OnGameEnded -= GameEnded ;
290
312
_pinMame . OnDisplayUpdated -= DisplayUpdated ;
291
313
_pinMame . OnSolenoidUpdated -= SolenoidUpdated ;
314
+ _pinMame . OnDisplayAvailable -= OnDisplayAvailable ;
315
+ _pinMame . OnAudioAvailable -= OnAudioAvailable ;
316
+ _pinMame . OnAudioUpdated -= OnAudioUpdated ;
292
317
}
293
318
_frameBuffer . Clear ( ) ;
294
319
_dmdLevels . Clear ( ) ;
0 commit comments