@@ -258,28 +258,32 @@ private int OnAudioAvailable(PinMameAudioInfo audioInfo)
258
258
259
259
private int OnAudioUpdated ( IntPtr framePtr , int frameSize )
260
260
{
261
+ var frame = new float [ frameSize * 2 ] ;
262
+ var min = 0f ;
263
+ var max = 0f ;
264
+
261
265
unsafe {
262
- var src = ( short * ) framePtr ;
263
- var frame = new float [ frameSize * 2 ] ;
264
- var min = 0f ;
265
- var max = 0f ;
266
+ var src = ( short * ) framePtr ;
266
267
for ( var i = 0 ; i < frameSize ; i ++ ) {
267
268
frame [ i * 2 ] = src [ i ] / 32768f ;
268
269
frame [ i * 2 + 1 ] = frame [ i * 2 ] ; // duplicate - assuming input channels = 1, and output channels = 2.
269
270
min = System . Math . Min ( min , frame [ i * 2 ] ) ;
270
271
max = System . Math . Max ( max , frame [ i * 2 ] ) ;
271
272
}
272
- lock ( _audioQueue ) {
273
- if ( _audioQueue . Count >= _maximalQueueSize ) {
274
- _audioQueue . Clear ( ) ;
275
- Logger . Error ( "Clearing full audio frame queue." ) ;
276
- }
277
- _audioQueue . Enqueue ( frame ) ;
278
- if ( min < - 0.1f || max > 0.1f ) {
279
- Logger . Info ( $ "Queueing audio sample ({ frameSize } ). [{ System . Math . Round ( min , 4 ) } { System . Math . Round ( max , 4 ) } ]") ;
280
- }
273
+ }
274
+
275
+ lock ( _audioQueue ) {
276
+ if ( _audioQueue . Count >= _maximalQueueSize ) {
277
+ _audioQueue . Clear ( ) ;
278
+ Logger . Error ( "Clearing full audio frame queue." ) ;
281
279
}
280
+ _audioQueue . Enqueue ( frame ) ;
281
+ }
282
+
283
+ if ( min < - 0.1f || max > 0.1f ) {
284
+ Logger . Info ( $ "Queueing audio sample ({ frameSize } ). [{ System . Math . Round ( min , 4 ) } { System . Math . Round ( max , 4 ) } ]") ;
282
285
}
286
+
283
287
return _audioInfo . SamplesPerFrame ;
284
288
}
285
289
@@ -294,9 +298,7 @@ private void OnAudioFilterRead(float[] data, int channels)
294
298
_lastAudioFrameOffset = 0 ;
295
299
296
300
lock ( _audioQueue ) {
297
- var i = 0 ;
298
301
while ( remaining > 0 && _audioQueue . Count > 0 ) {
299
- i ++ ;
300
302
var frame = _audioQueue . Dequeue ( ) ;
301
303
if ( frame . Length <= remaining ) {
302
304
Buffer . BlockCopy ( frame , 0 , data , data . Length - remaining , frame . Length ) ;
@@ -309,10 +311,6 @@ private void OnAudioFilterRead(float[] data, int channels)
309
311
remaining = 0 ;
310
312
}
311
313
}
312
- if ( _audioQueue . Count >= _maximalQueueSize ) {
313
- _audioQueue . Clear ( ) ;
314
- Logger . Info ( $ "Dequeued { i } audio samples, written { data . Length - remaining } , remaining { remaining } , clearing queue!") ;
315
- }
316
314
}
317
315
318
316
} else {
0 commit comments