From fd9eab30990e2a5f2ffcb96775d3f2ee86d27183 Mon Sep 17 00:00:00 2001
From: Sebastian Krzyszkowiak <dos@dosowisko.net>
Date: Tue, 5 Sep 2023 05:42:18 +0200
Subject: [PATCH] bl00mbox: Load wave samples 5 seconds at a time

Makes it fast enough that many apps that have loading screens
don't need it anymore.
---
 python_payload/bl00mbox/_patches.py | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/python_payload/bl00mbox/_patches.py b/python_payload/bl00mbox/_patches.py
index a4d3608a33..9a5ec12db0 100644
--- a/python_payload/bl00mbox/_patches.py
+++ b/python_payload/bl00mbox/_patches.py
@@ -152,24 +152,29 @@ class sampler(_Patch):
             frames = self.memory_len
         self.sample_len = frames
 
+        BUFFER_SIZE = 48000 * 5
+
         if f.getnchannels() == 1:
             # fast path for mono
             table = self.plugins.sampler.table_bytearray
             for i in range(
                 2 * self.buffer_offset_i16,
                 (self.sample_len + self.buffer_offset_i16) * 2,
-                100,
+                BUFFER_SIZE * 2,
             ):
-                table[i : i + 100] = f.readframes(50)
+                table[i : i + BUFFER_SIZE * 2] = f.readframes(BUFFER_SIZE)
         else:
             # somewhat fast path for stereo
             table = self.plugins.sampler.table_int16_array
             for i in range(
-                self.buffer_offset_i16, self.sample_len + self.buffer_offset_i16
+                self.buffer_offset_i16,
+                self.sample_len + self.buffer_offset_i16,
+                BUFFER_SIZE,
             ):
-                frame = f.readframes(1)
-                value = int.from_bytes(frame[0:2], "little")
-                table[i] = value
+                frame = f.readframes(BUFFER_SIZE)
+                for j in range(0, len(frame) // 4):
+                    value = int.from_bytes(frame[4 * j : 4 * j + 2], "little")
+                    table[i + j] = value
         f.close()
 
     def save(self, filename, overwrite=True):
-- 
GitLab