(&mut self, _stream: &mut dyn AudioOutputStreamSafe, frames: &mut [(f32, f32)])
| 486 | type FrameType = (f32, Stereo); |
| 487 | |
| 488 | fn on_audio_ready(&mut self, _stream: &mut dyn AudioOutputStreamSafe, frames: &mut [(f32, f32)]) -> DataCallbackResult { |
| 489 | // Convert frame tuples to interleaved slice |
| 490 | let len = frames.len() * 2; |
| 491 | let ptr = frames.as_mut_ptr() as *mut f32; |
| 492 | let interleaved = unsafe { std::slice::from_raw_parts_mut(ptr, len) }; |
| 493 | for s in interleaved.iter_mut() { *s = 0.0; } |
| 494 | unsafe { |
| 495 | ENGINE.get_mut().map(|eng| { eng.audio.mix_output(interleaved); }); |
| 496 | } |
| 497 | if AUDIO_RUNNING.load(Ordering::SeqCst) { |
| 498 | DataCallbackResult::Continue |
| 499 | } else { |
| 500 | DataCallbackResult::Stop |
| 501 | } |
| 502 | } |
| 503 | } |
| 504 | |
| 505 | let mut stream = AudioStreamBuilder::default() |
nothing calls this directly
no test coverage detected