From: Guillaume Pellerin Date: Mon, 28 Oct 2013 15:57:34 +0000 (+0100) Subject: add decoder.utils, fix some api test names X-Git-Tag: 0.5.1-0~17 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=17728d28ad2b9c23bdc108c402ecb893adc86783;p=timeside.git add decoder.utils, fix some api test names --- diff --git a/tests/api/test_pipe_spectrogram.py b/tests/api/test_pipe_spectrogram.py deleted file mode 100644 index a16874e..0000000 --- a/tests/api/test_pipe_spectrogram.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -from timeside.core import * -from timeside.api import * -from timeside.decoder import * -from timeside.grapher import * - -sample_dir = '../samples' -img_dir = '../results/img' -if not os.path.exists(img_dir): - os.mkdir(img_dir) - -test_dict = {'sweep.wav': 'spec_wav.png', - 'sweep.flac': 'spec_flac.png', - 'sweep.ogg': 'spec_ogg.png', - 'sweep.mp3': 'spec_mp3.png', - } - -for source, image in test_dict.iteritems(): - audio = os.path.join(os.path.dirname(__file__), sample_dir + os.sep + source) - image = img_dir + os.sep + image - print 'Test : decoder(%s) | waveform (%s)' % (source, image) - decoder = FileDecoder(audio) - spectrogram = Spectrogram() - (decoder | spectrogram).run() - print 'frames per pixel = ', spectrogram.samples_per_pixel - print "render spectrogram to: %s" % image - spectrogram.render(image) - - - diff --git a/tests/api/test_pipe_waveform.py b/tests/api/test_pipe_waveform.py deleted file mode 100644 index a028df5..0000000 --- a/tests/api/test_pipe_waveform.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -from timeside.core import * -from timeside.api import * -from timeside.decoder import * -from timeside.grapher import * - -sample_dir = '../samples' -img_dir = '../results/img' -if not os.path.exists(img_dir): - os.makedirs(img_dir) - -test_dict = {'sweep.wav': 'waveform_wav.png', - 'sweep.flac': 'waveform_flac.png', - 'sweep.ogg': 'waveform_ogg.png', - 'sweep.mp3': 'waveform_mp3.png', - } - -for source, image in test_dict.iteritems(): - audio = os.path.join(os.path.dirname(__file__), sample_dir + os.sep + source) - image = img_dir + os.sep + image - print 'Test : decoder(%s) | waveform (%s)' % (source, image) - decoder = FileDecoder(audio) - waveform = Waveform(width=1024, height=256, bg_color=(255,255,255), color_scheme='default') - (decoder | waveform).run() - print 'frames per pixel = ', waveform.samples_per_pixel - print "render waveform to: %s" % image - waveform.render(image) diff --git a/tests/api/test_spectrogram.py b/tests/api/test_spectrogram.py new file mode 100644 index 0000000..a16874e --- /dev/null +++ b/tests/api/test_spectrogram.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- + +import os +from timeside.core import * +from timeside.api import * +from timeside.decoder import * +from timeside.grapher import * + +sample_dir = '../samples' +img_dir = '../results/img' +if not os.path.exists(img_dir): + os.mkdir(img_dir) + +test_dict = {'sweep.wav': 'spec_wav.png', + 'sweep.flac': 'spec_flac.png', + 'sweep.ogg': 'spec_ogg.png', + 'sweep.mp3': 'spec_mp3.png', + } + +for source, image in test_dict.iteritems(): + audio = os.path.join(os.path.dirname(__file__), sample_dir + os.sep + source) + image = img_dir + os.sep + image + print 'Test : decoder(%s) | waveform (%s)' % (source, image) + decoder = FileDecoder(audio) + spectrogram = Spectrogram() + (decoder | spectrogram).run() + print 'frames per pixel = ', spectrogram.samples_per_pixel + print "render spectrogram to: %s" % image + spectrogram.render(image) + + + diff --git a/tests/api/test_waveform.py b/tests/api/test_waveform.py new file mode 100644 index 0000000..a028df5 --- /dev/null +++ b/tests/api/test_waveform.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +import os +from timeside.core import * +from timeside.api import * +from timeside.decoder import * +from timeside.grapher import * + +sample_dir = '../samples' +img_dir = '../results/img' +if not os.path.exists(img_dir): + os.makedirs(img_dir) + +test_dict = {'sweep.wav': 'waveform_wav.png', + 'sweep.flac': 'waveform_flac.png', + 'sweep.ogg': 'waveform_ogg.png', + 'sweep.mp3': 'waveform_mp3.png', + } + +for source, image in test_dict.iteritems(): + audio = os.path.join(os.path.dirname(__file__), sample_dir + os.sep + source) + image = img_dir + os.sep + image + print 'Test : decoder(%s) | waveform (%s)' % (source, image) + decoder = FileDecoder(audio) + waveform = Waveform(width=1024, height=256, bg_color=(255,255,255), color_scheme='default') + (decoder | waveform).run() + print 'frames per pixel = ', waveform.samples_per_pixel + print "render waveform to: %s" % image + waveform.render(image) diff --git a/timeside/decoder/utils.py b/timeside/decoder/utils.py new file mode 100644 index 0000000..b806e1e --- /dev/null +++ b/timeside/decoder/utils.py @@ -0,0 +1,37 @@ +import numpy + + +class Noise(object): + """A class that mimics audiolab.sndfile but generates noise instead of reading + a wave file. Additionally it can be told to have a "broken" header and thus crashing + in the middle of the file. Also useful for testing ultra-short files of 20 samples.""" + + def __init__(self, num_frames, has_broken_header=False): + self.seekpoint = 0 + self.num_frames = num_frames + self.has_broken_header = has_broken_header + + def seek(self, seekpoint): + self.seekpoint = seekpoint + + def get_nframes(self): + return self.num_frames + + def get_samplerate(self): + return 44100 + + def get_channels(self): + return 1 + + def read_frames(self, frames_to_read): + if self.has_broken_header and self.seekpoint + frames_to_read > self.num_frames / 2: + raise IOError() + + num_frames_left = self.num_frames - self.seekpoint + if num_frames_left < frames_to_read: + will_read = num_frames_left + else: + will_read = frames_to_read + self.seekpoint += will_read + return numpy.random.random(will_read)*2 - 1 +