buffer = frames[:,0].copy()
             buffer.shape = (len(buffer),1)
 
+        (spectral_centroid, db_spectrum) = self.spectral_centroid.process(buffer, True)
         for samples, end in self.peaks_adapter.process(buffer, eod):
             if self.pixel_cursor == self.image_width:
                 break
             peaks = self.peaks(samples)
-            # FIXME : too much repeated spectrum computation cycle
-            (spectral_centroid, db_spectrum) = self.spectral_centroid.process(buffer, True)
             self.draw_peaks(self.pixel_cursor, peaks, spectral_centroid)
             self.pixel_cursor += 1
 
 
 
 class SpectrogramImage(object):
-    def __init__(self, image_width, image_height, nframes, samplerate, buffer_size, bg_color=None, color_scheme=None, filename=None):
 
+    def __init__(self, image_width, image_height, nframes, samplerate, buffer_size, bg_color=None, color_scheme=None, filename=None):
         self.image_width = image_width
         self.image_height = image_height
         self.nframes = nframes
             buffer = frames[:,0].copy()
             buffer.shape = (len(buffer),1)
 
+        (spectral_centroid, db_spectrum) = self.spectral_centroid.process(buffer, True)
         for samples, end in self.peaks_adapter.process(buffer, eod):
             if self.pixel_cursor == self.image_width:
                 break
-            # FIXME : too much repeated spectrum computation cycle
-            (spectral_centroid, db_spectrum) = self.spectral_centroid.process(buffer, True)
             self.draw_spectrum(self.pixel_cursor, db_spectrum)
             self.pixel_cursor += 1