diff --git a/src/device/ai.rs b/src/device/ai.rs index 548b289..5552c4d 100644 --- a/src/device/ai.rs +++ b/src/device/ai.rs @@ -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) { diff --git a/src/ui/audio.rs b/src/ui/audio.rs index b81ad9d..536e555 100644 --- a/src/ui/audio.rs +++ b/src/ui/audio.rs @@ -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 = vec![0; min_latency as usize & !3];