tweak audio queue formula

This commit is contained in:
Logan McNaughton 2026-01-20 10:04:19 +01:00
parent bfad71f09f
commit 1aa879d759
2 changed files with 3 additions and 4 deletions

View File

@ -45,11 +45,10 @@ fn get_remaining_dma_length(device: &device::Device) -> u64 {
}
fn get_dma_duration(device: &device::Device) -> u64 {
let samples_per_sec = device.vi.clock / (1 + device.ai.regs[AI_DACRATE_REG as usize]) as u64;
let bytes_per_sample = 4; /* XXX: assume 16bit stereo - should depends on bitrate instead */
let length = (device.ai.regs[AI_LEN_REG as usize] & !7) as u64;
length * (device.cpu.clock_rate / (bytes_per_sample * samples_per_sec))
length * (device.cpu.clock_rate / (bytes_per_sample * device.ai.freq))
}
fn do_dma(device: &mut device::Device) {

View File

@ -85,8 +85,8 @@ pub fn play_audio(device: &device::Device, dram_addr: usize, length: u64) {
let audio_queued =
unsafe { sdl3_sys::audio::SDL_GetAudioStreamQueued(device.ui.audio.audio_stream) } as f64;
let acceptable_latency = (device.ai.freq as f64 * 0.2) * 4.0;
let min_latency = (device.ai.freq as f64 * 0.02) * 4.0;
let min_latency = device.ai.freq as f64 * device.vi.frame_time * 4.0;
let acceptable_latency = min_latency * 8.0;
if audio_queued < min_latency {
let silence_buffer: Vec<u8> = vec![0; min_latency as usize & !3];