@@ -282,33 +282,39 @@ impl AudioMixer {
282282
283283 if let Some ( diff) =
284284 elapsed_since_last_frame. checked_sub ( buffer_last_duration)
285- && diff >= Duration :: from_millis ( 1 )
286285 {
287- let gap = diff;
286+ let min_gap = if buffer_last_duration. is_zero ( ) {
287+ Duration :: from_micros ( 1 )
288+ } else {
289+ buffer_last_duration
290+ } ;
288291
289- print ! ( "Gap between last buffer frame, inserting {gap:?} of silence" ) ;
292+ if diff >= min_gap {
293+ let gap = diff;
290294
291- let silence_samples_needed = ( gap. as_secs_f64 ( ) ) * rate as f64 ;
292- let silence_samples_count = silence_samples_needed. ceil ( ) as usize ;
295+ debug ! ( ?gap, "Gap between last buffer frame, inserting silence" ) ;
293296
294- let mut frame = ffmpeg:: frame:: Audio :: new (
295- source. info . sample_format ,
296- silence_samples_count,
297- source. info . channel_layout ( ) ,
298- ) ;
297+ let silence_samples_needed = ( gap. as_secs_f64 ( ) ) * rate as f64 ;
298+ let silence_samples_count = silence_samples_needed. ceil ( ) as usize ;
299299
300- for i in 0 ..frame. planes ( ) {
301- frame. data_mut ( i) . fill ( 0 ) ;
302- }
300+ let mut frame = ffmpeg:: frame:: Audio :: new (
301+ source. info . sample_format ,
302+ silence_samples_count,
303+ source. info . channel_layout ( ) ,
304+ ) ;
303305
304- frame. set_rate ( source. info . rate ( ) as u32 ) ;
306+ for i in 0 ..frame. planes ( ) {
307+ frame. data_mut ( i) . fill ( 0 ) ;
308+ }
309+
310+ frame. set_rate ( source. info . rate ( ) as u32 ) ;
305311
306- let timestamp = buffer_last_timestamp + gap ;
307- source . buffer_last = Some ( (
308- timestamp,
309- Duration :: from_secs_f64 ( silence_samples_count as f64 / rate as f64 ) ,
310- ) ) ;
311- source . buffer . push_back ( AudioFrame :: new ( frame , timestamp ) ) ;
312+ let silence_duration =
313+ Duration :: from_secs_f64 ( silence_samples_count as f64 / rate as f64 ) ;
314+ let timestamp = buffer_last_timestamp + buffer_last_duration ;
315+ source . buffer_last = Some ( ( timestamp , silence_duration ) ) ;
316+ source . buffer . push_back ( AudioFrame :: new ( frame , timestamp ) ) ;
317+ }
312318 }
313319 }
314320 }
@@ -681,3 +687,4 @@ mod test {
681687 }
682688 }
683689}
690+
0 commit comments