print("caching data...")
        caching = True
 
+       all_spectrums = np.zeros((segment_count, window_height, window_size, 3), dtype=np.uint8)
+
        for segment_index in tqdm(range(segment_count)):
                # get the specturm of the current sample
                segment_start = segment_index * segment_samples
                if segment_index == 10:
                        cv.imwrite("spectrum_sample.jpg", spectrum)
 
-               np.save(f"cache/frame{segment_index}.npy", spectrum)
+               all_spectrums[segment_index] = spectrum
+               #np.save(f"cache/frame{segment_index}.npy", spectrum)
 
        segment_index = 0
        print("cached!")
 
        while segment_index < segment_count:
 
-               spectrum = np.load(f"cache/frame{segment_index}.npy")
+               spectrum = all_spectrums[segment_index]#np.load(f"cache/frame{segment_index}.npy")
 
                # display and capture
                camera.display(spectrum)
        bigger windows are exponentially better so you should prefer this if possible
        obviously the biggest you can use is the size of your display unless you have
        some way of arranging the pixles independant of the orrigional spectrogram.
+       This should ideally be one of n^2 (possibly n^2 * m^3????).
+       e.g.: 64 81 100 121 144 169 192 225
 - Window height
        This is the height of the image, or, the number of ffts performed in one "batch".
        This batching is multithreaded and therefore has some effect on process speed.
 
 # define parameters
 sample_rate = 22_050
-window_size = 150
+window_size = 144
 window_height = 80
 
+hop_size = window_size // 2
+
 caching = False
 
 if __name__ == "__main__":