From 81287c23aab564448656e1c33b35e8dd94ccccb5 Mon Sep 17 00:00:00 2001 From: yomguy Date: Wed, 16 Jun 2010 22:53:29 +0000 Subject: [PATCH] reduce FFT size, add scheme test, trying to fix bad spectrum --- grapher/core.py | 16 ++++++++++------ tests/api/examples.py | 2 +- tests/samples/sweep.ogg | Bin 60886 -> 60886 bytes 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/grapher/core.py b/grapher/core.py index 0c3ff70..afb5793 100644 --- a/grapher/core.py +++ b/grapher/core.py @@ -72,6 +72,7 @@ class Spectrum(object): samples = buffer[:,0].copy() if end: break + samples *= self.window fft = numpy.fft.fft(samples) spectrum = numpy.abs(fft[:fft.shape[0] / 2 + 1]) / float(self.fft_size) # normalized abs(FFT) between 0 and 1 @@ -143,7 +144,9 @@ class WaveformImage(object): self.color_scheme = color_scheme if not color_scheme: self.color_scheme = 'default' - colors = color_schemes[self.color_scheme]['waveform'] + colors = color_schemes[self.color_scheme]['waveform'] + if isinstance(color_scheme, dict): + colors = color_scheme['waveform'] self.color_lookup = interpolate_colors(colors) self.samples_per_pixel = self.nframes / float(self.image_width) @@ -151,8 +154,8 @@ class WaveformImage(object): self.pixels_adapter = FixedSizeInputAdapter(self.buffer_size, 1, pad=False) self.pixels_adapter_nframes = self.pixels_adapter.nframes(self.nframes) - self.lower = 500 - self.higher = 16000 + self.lower = 800 + self.higher = 12000 self.spectrum = Spectrum(self.fft_size, self.nframes, self.samplerate, self.lower, self.higher, numpy.hanning) self.image = Image.new("RGB", (self.image_width, self.image_height), self.bg_color) @@ -246,7 +249,7 @@ class WaveformImage(object): def save(self): """ Apply last 2D transforms and write all pixels to the file. """ - a = 25 + a = 0 for x in range(self.image_width): self.pixel[x, self.image_height/2] = tuple(map(lambda p: p+a, self.pixel[x, self.image_height/2])) self.image.save(self.filename) @@ -274,8 +277,8 @@ class SpectrogramImage(object): self.pixels_adapter = FixedSizeInputAdapter(self.buffer_size, 1, pad=False) self.pixels_adapter_nframes = self.pixels_adapter.nframes(self.nframes) - self.lower = 20 - self.higher = 16000 + self.lower = 100 + self.higher = 22050 self.spectrum = Spectrum(self.fft_size, self.nframes, self.samplerate, self.lower, self.higher, numpy.hanning) # generate the lookup which translates y-coordinate to fft-bin @@ -314,6 +317,7 @@ class SpectrogramImage(object): buffer = frames[:,0].copy() buffer.shape = (len(buffer),1) + print len(buffer) # FIXME : breaks spectrum linearity for samples, end in self.pixels_adapter.process(buffer, eod): if self.pixel_cursor < self.image_width: diff --git a/tests/api/examples.py b/tests/api/examples.py index 475c650..418d2ca 100644 --- a/tests/api/examples.py +++ b/tests/api/examples.py @@ -265,7 +265,7 @@ class Waveform(Processor): class Spectrogram(Processor): implements(IGrapher) - FFT_SIZE = 0x1000 + FFT_SIZE = 0x400 @interfacedoc def __init__(self, width=None, height=None, output=None, bg_color=None, color_scheme=None): diff --git a/tests/samples/sweep.ogg b/tests/samples/sweep.ogg index dc6ac204a7e82e05cfb38df10740af4a299b8075..e30bf99a320e216e4df32e72b91277d68a8a198a 100644 GIT binary patch delta 347 zcmcb1oB7&p<`Dn%^k4=i1}NbEJTC*pd}p?}l2MMaEWaozvlt}6FlA&Pf|X=JE4@1VHAVD_>o>`5*sv0k8-&P$a#Cn{)F+g;t0N$T+@F zQX4lH8R|epSb-udPqJ;?yvnfvBEkj~;f>vtzF94(0V2W<6cN1j?DghNNvRMK4xq?{ z-AA5nRxUP%h;RZ$bYnMd-kj823lZT0iUf1`b#8t=ISnGh4HQwx|0=XOc1brxga;@h z_dk$h^Or4rf?zlE0!7T<*iYZgcgzE#h7Twb>#KcabJDdt5HVSqu_ja#_Q`@E-^m90|`5KHcpW-xxBFp9drWGMBGIN_6u-{_6r@5oVys-I9_en;$B)LPS`A zBAWXqi)}74)Pabw0!8-l)xO%i%CP_7oIsIGZZ7-HNzJto5iX#}{(Gw~Z+<;F4I;t~6xrQb*R?rzNjF4< z2Pnd{rvLutFI)Ho!EWXSicGcd)7s2;%mbo^4=B>(yJgbmq-%E|YWRU7X<=J*HhaD3 GVFdu*h;L#5 -- 2.39.5