diff --git a/frontends/libretro/src/lib.rs b/frontends/libretro/src/lib.rs
index 2cd3ef2264c28b82526c0778bddbcecc9214f571..5720045a6bb0addf4750d233bc7610e9a1bdfc41 100644
--- a/frontends/libretro/src/lib.rs
+++ b/frontends/libretro/src/lib.rs
@@ -29,7 +29,6 @@ use std::{
 static mut EMULATOR: Option<GameBoy> = None;
 static mut KEY_STATES: Option<HashMap<RetroJoypad, bool>> = None;
 static mut FRAME_BUFFER: [u8; FRAME_BUFFER_RGB565_SIZE] = [0x00; FRAME_BUFFER_RGB565_SIZE];
-static mut AUDIO_BUFFER: Option<Vec<i16>> = None;
 
 static mut PENDING_CYCLES: u32 = 0_u32;
 
@@ -152,10 +151,6 @@ pub extern "C" fn retro_init() {
     unsafe {
         EMULATOR = Some(GameBoy::new(None));
         KEY_STATES = Some(HashMap::new());
-        AUDIO_BUFFER = Some(vec![
-            0x00;
-            EMULATOR.as_ref().unwrap().apu_i().audio_buffer_max()
-        ]);
     }
 }
 
@@ -224,12 +219,10 @@ pub extern "C" fn retro_set_controller_port_device() {
 pub extern "C" fn retro_run() {
     let emulator = unsafe { EMULATOR.as_mut().unwrap() };
     let video_refresh_cb = unsafe { VIDEO_REFRESH_CALLBACK.as_ref().unwrap() };
-    let sample_batch_cb = unsafe { AUDIO_SAMPLE_BATCH_CALLBACK.as_ref().unwrap() };
+    let sample_cb = unsafe { AUDIO_SAMPLE_CALLBACK.as_ref().unwrap() };
     let input_poll_cb = unsafe { INPUT_POLL_CALLBACK.as_ref().unwrap() };
     let input_state_cb = unsafe { INPUT_STATE_CALLBACK.as_ref().unwrap() };
     let key_states = unsafe { KEY_STATES.as_mut().unwrap() };
-    let audio_buffer_ref = unsafe { AUDIO_BUFFER.as_mut().unwrap() };
-    let channels = emulator.audio_channels();
 
     let mut last_frame = emulator.ppu_frame();
 
@@ -282,11 +275,9 @@ pub extern "C" fn retro_run() {
                 .map(|v| *v as i16 * 256)
                 .collect::<Vec<i16>>();
 
-            audio_buffer_ref[0..audio_buffer.len()].copy_from_slice(&audio_buffer);
-            sample_batch_cb(
-                audio_buffer_ref.as_ptr(),
-                audio_buffer.len() / channels as usize,
-            );
+            for chunk in audio_buffer.chunks_exact(2) {
+                sample_cb(chunk[0], chunk[1]);
+            }
 
             emulator.clear_audio_buffer();
         }