]> git.parisson.com Git - timeside.git/commitdiff
make a processor call test, new api debug
authoryomguy <yomguy@parisson.com>
Fri, 9 Oct 2009 12:27:29 +0000 (12:27 +0000)
committeryomguy <yomguy@parisson.com>
Fri, 9 Oct 2009 12:27:29 +0000 (12:27 +0000)
23 files changed:
analyze/api.py
analyze/channels.py
analyze/dc.py
analyze/duration.py
analyze/encoding.py
analyze/format.py
analyze/max_level.py
analyze/mean_level.py
analyze/resolution.py
analyze/samplerate.py
analyze/vamp/core.py
decode/flac.py
decode/mp3.py
decode/ogg.py
decode/wav.py
encode/api.py
encode/flac.py
encode/mp3.py
encode/ogg.py
graph/api.py
graph/spectrogram_audiolab.py
graph/waveform_audiolab.py
tests/test.py [new file with mode: 0755]

index 0a2cf729b9a41b8e7e7fb0b5c11075212c3efe2d..6584d3182b7d04718185c72fe7aa2505677e0759 100644 (file)
@@ -24,18 +24,18 @@ from timeside.core import *
 class IAnalyzer(Interface):
     """Media item analyzer driver interface"""
 
-    def get_id():
+    def id():
         """Return a short id alphanumeric, lower-case string."""
 
-    def get_name():
+    def name():
         """Return the analyze name, such as "Mean Level", "Max level",
         "Total length, etc..
         """
 
-    def get_unit():
+    def unit():
         """Return the unit of the data such as "dB", "seconds", etc...
         """
 
-    def render(media_item, options=None):
+    def render(media, options=None):
         """Return the result data of the process"""
 
index 6e363818ce44d93a09f7b8026afb9558c0f1422d..cb7e0fba288d7cebaa2fcc9623ac7e2a2c444391 100644 (file)
@@ -28,13 +28,13 @@ class ChannelAnalyser(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "nb_channels"
 
-    def get_name(self):
+    def name(self):
         return "Channels"
 
-    def get_unit(self):
+    def unit(self):
         return ""
 
     def render(self, media_item, options=None):
index b775b9ec0bc249a7efa076cadb5976b71b250730..050980946f3b7c7e6e059574ce8a24b7578e8992 100644 (file)
@@ -28,13 +28,13 @@ class MeanDCShiftAnalyser(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "dc"
 
-    def get_name(self):
+    def name(self):
         return "Mean DC shift"
 
-    def get_unit(self):
+    def unit(self):
         return "%"
 
     def render(self, media_item, options=None):
index 94e8236aafc003a29c6181db87715f66f72124c8..e69d31d0d1d3de3082ee2b677a59ae8e0c31aaab 100644 (file)
@@ -29,13 +29,13 @@ class DurationAnalyzer(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "duration"
 
-    def get_name(self):
+    def name(self):
         return "Duration"
 
-    def get_unit(self):
+    def unit(self):
         return "h:m:s"
 
     def render(self, media_item, options=None):
index dde090b908c4a8434290eaeac6043918ff9e08b4..e6ba192978796f6a5b81bda83e2d73f361bf2ac3 100644 (file)
@@ -28,13 +28,13 @@ class EncodingAnalyser(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "encoding"
 
-    def get_name(self):
+    def name(self):
         return "Encoding format"
 
-    def get_unit(self):
+    def unit(self):
         return ""
 
     def render(self, media_item, options=None):
index d84ce4070278bf36da16a67929299c28deefa328..b86c1cf1a72bdf4498fadca42cf8109bdb2557da 100644 (file)
@@ -28,13 +28,13 @@ class FormatAnalyser(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "format"
 
-    def get_name(self):
+    def name(self):
         return "File format"
 
-    def get_unit(self):
+    def unit(self):
         return ""
 
     def render(self, media_item, options=None):
index bc296ff7593ac0e917bf2fb5779ddf153a28c646..8768d7632304127c7a0ed622e78a0f23aa7673fc 100644 (file)
@@ -28,13 +28,13 @@ class MaxLevelAnalyzer(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "max_level"
 
-    def get_name(self):
+    def name(self):
         return "Maximum peak level"
 
-    def get_unit(self):
+    def unit(self):
         return "dB"
 
     def render(self, media_item, options=None):
index 716205f9fb0a4d2013e7f5e4c3e463c4c800196c..3443c9ae3058201684d186cdfef46828b9b2272c 100644 (file)
@@ -28,13 +28,13 @@ class MeanLevelAnalyser(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "mean_level"
 
-    def get_name(self):
+    def name(self):
         return "Mean RMS level"
 
-    def get_unit(self):
+    def unit(self):
         return "dB"
 
     def render(self, media_item, options=None):
index e443639b25c2d3911128805272ef213af4f19fa6..60a17a04b1dd902197aa4ec4a1d6a8bca71740fc 100644 (file)
@@ -28,13 +28,13 @@ class ResolutionAnalyser(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "resolution"
 
-    def get_name(self):
+    def name(self):
         return "Resolution"
 
-    def get_unit(self):
+    def unit(self):
         return "bits"
 
     def render(self, media_item, options=None):
index 7e16b52078959c0fe87be33ea28f04b60cdcc8ac..638e9f8b24caa47a9e522f7566766859b1f0f302 100644 (file)
@@ -28,13 +28,13 @@ class SampleRateAnalyzer(AudioProcessor):
 
     implements(IAnalyzer)
 
-    def get_id(self):
+    def id(self):
         return "samplerate"
 
-    def get_name(self):
+    def name(self):
         return "Samplerate"
 
-    def get_unit(self):
+    def unit(self):
         return "Hz"
 
     def render(self, media_item, options=None):
index fab2bd1ca69e5493e44e530eaa34f34f5e5ca6af..4c89c9717cbe5b63d16122119ad5dbf99e4ce516 100644 (file)
@@ -37,13 +37,13 @@ class VampCoreAnalyzer:
         self.host = 'vamp-simple-host'
         self.buffer_size = 0xFFFF
                
-    def get_id(self):
+    def id(self):
         return "vamp_plugins"
 
-    def get_name(self):
+    def name(self):
         return "Vamp plugins"
 
-    def get_unit(self):
+    def unit(self):
         return ""
 
     def get_plugins_list(self):
index 7f22813887a1b0d113202a25b63c2e3512a45725..02eed2b2cfe96e3696a2a695e40c0e24b380a792 100644 (file)
@@ -33,11 +33,6 @@ class FlacDecoder(DecoderCore):
 
     implements(IDecoder)
 
-    def __init__(self):
-        self.description = self.description()
-        self.format = self.format()
-        self.mime_type = self.mime_type()
-
     def format(self):
         return 'FLAC'
 
index 85cc32b974d2d246088ceb10807ddc8bac779efe..6918b9b1b5487fafeaf6c95265dbb6d4d9f2a7ab 100644 (file)
@@ -33,11 +33,6 @@ class Mp3Decoder(DecoderCore):
 
     implements(IDecoder)
 
-    def __init__(self):
-        self.description = self.description()
-        self.format = self.format()
-        self.mime_type = self.mime_type()
-
     def format(self):
         return 'MP3'
 
index 75789a8b8ab1d47d00bd0b6a0c65a3d154b306e2..c1a9cad55fdd67a39a3691af88d032a0f3d0c13e 100644 (file)
@@ -33,9 +33,6 @@ class OggDecoder(DecoderCore):
     implements(IDecoder)
 
     def __init__(self):
-        self.description = self.description()
-        self.format = self.format()
-        self.mime_type = self.mime_type()
         self.dub2args_dict = {'creator': 'artist',
                              'relation': 'album'
                              }
index 41d2731d0259fde56a7fa917e1df64c2f45b0b9d..995b4a41b4a302492e266dcad4ab0944eabaeb61 100644 (file)
@@ -30,11 +30,6 @@ class WavDecoder(DecoderCore):
 
     implements(IDecoder)
 
-    def __init__(self):
-        self.description = self.description()
-        self.format = self.format()
-        self.mime_type = self.mime_type()
-
     def format(self):
         return 'WAV'
 
index 41870370baa84e07a0d00a282e67724a9ec2b020..7f77f7500e5bab7285d0f010d90f8f15cfaa07d3 100644 (file)
@@ -46,14 +46,6 @@ class IEncoder(Interface):
     def mime_type():
         """Return the mime type corresponding to this encode format"""
 
-    def set_cache_dir(path):
-        """Set the directory where cached files should be stored. Does nothing
-        if the encodeer doesn't support caching.
-
-        The driver shouldn't assume that this method will always get called. A
-        temporary directory should be used if that's not the case.
-        """
-
     def process(source, metadata, options=None):
         """Perform the encoding process and stream the result as a generator.
 
index d2e5b99c2f751fd6a41ede34099aa72322a1978b..60bf3569d50b5aa513721983c2fb378af50f5d30 100644 (file)
@@ -35,16 +35,16 @@ class FlacEncoder(EncoderCore):
     def __init__(self):
         self.quality_default = '-5'
 
-    def get_format(self):
+    def format(self):
         return 'FLAC'
 
-    def get_file_extension(self):
+    def file_extension(self):
         return 'flac'
 
-    def get_mime_type(self):
+    def mime_type(self):
         return 'application/flac'
 
-    def get_description(self):
+    def description(self):
         return """
         Free Lossless Audio Codec (FLAC) is a file format for lossless audio
         data compression. During compression, FLAC does not lose quality from
index 16b4934b809c92c169542494ddea6c8b732a2641..3360f6dfcd36a414efd943afbfbfebc976b4c09d 100644 (file)
@@ -34,9 +34,6 @@ class Mp3Encoder(EncoderCore):
     implements(IEncoder)
 
     def __init__(self):
-        self.description = self.description()
-        self.format = self.format()
-        self.mime_type = self.mime_type()
         self.bitrate_default = '192'
         self.dub2id3_dict = {'title': 'TIT2', #title2
                              'creator': 'TCOM', #composer
@@ -54,16 +51,16 @@ class Mp3Encoder(EncoderCore):
                              'publisher': 'tc', #comment
                              'date': 'ty', #year
                              }
-    def get_format(self):
+    def format(self):
         return 'MP3'
 
-    def get_file_extension(self):
+    def file_extension(self):
         return 'mp3'
 
-    def get_mime_type(self):
+    def mime_type(self):
         return 'audio/mpeg'
 
-    def get_description(self):
+    def description(self):
         return """
         MPEG-1 Audio Layer 3, more commonly referred to as MP3, is a patented
         digital audio encoding format using a form of lossy data compression.
index 07cac541339893a286a0255cfbb096b1a7c00d35..b04f22fba2b89d6f7fb411c5928ffc735548e7c4 100644 (file)
@@ -32,9 +32,6 @@ class OggVorbisEncoder(EncoderCore):
     implements(IEncoder)
 
     def __init__(self):
-        self.description = self.description()
-        self.format = self.format()
-        self.mime_type = self.mime_type()
         self.bitrate_default = '192'
         self.dub2args_dict = {'creator': 'artist',
                              'relation': 'album'
index 1df7e01312cc2f975114115e1b91a75f76bd3281..3cfd223178885e095d35792154f34c9b37239329 100644 (file)
 
 from timeside.core import *
 
-class IMediaItemGrapher(Interface):
+class IGrapher(Interface):
     """Media item visualizer driver interface"""
 
-    def get_id():
+    def id():
         """Return a short id alphanumeric, lower-case string."""
 
-    def get_name():
+    def name():
         """Return the graph name, such as "Waveform", "Spectral view",
         etc..
         """
 
     def set_colors(self, background=None, scheme=None):
-        """Set the colors used for image generation. background is a RGB tuple, 
+        """Set the colors used for image generation. background is a RGB tuple,
         and scheme a a predefined color theme name"""
         pass
 
index e29e83adddf23d1ba8369767241535b704c8ee01..d5619801df06ebf1a7d010656d6990945ea12458 100644 (file)
 # Author: Guillaume Pellerin <yomguy@parisson.com>
 
 from timeside.core import *
-from timeside.graph.api import IMediaItemGrapher
+from timeside.graph.api import IGrapher
 from tempfile import NamedTemporaryFile
 from timeside.graph.wav2png import *
 
 class SpectrogramGrapherAudiolab(Component):
     """Spectrogram graph driver (python style thanks to wav2png.py and scikits.audiolab)"""
 
-    implements(IMediaItemGrapher)
+    implements(IGrapher)
 
     bg_color = None
     color_scheme = None
 
-    def get_id(self):
+    def id(self):
         return "spectrogram_audiolab"
 
-    def get_name(self):
+    def name(self):
         return "Spectrogram (audiolab)"
-    
+
     def set_colors(self, background=None, scheme=None):
         self.bg_color = background
         self.color_scheme = scheme
@@ -56,9 +56,9 @@ class SpectrogramGrapherAudiolab(Component):
             image_height = height
         else:
             image_height = 200
-            
+
         fft_size = 2048
-        args = (wav_file, pngFile.name, image_width, image_height, fft_size, 
+        args = (wav_file, pngFile.name, image_width, image_height, fft_size,
                 self.bg_color, self.color_scheme)
         create_spectrogram_png(*args)
 
index 59d9a50437d7029bafe934bea2a0155360e2f375..f9b9201d6dc6d27f7ca59b400e23a9b51c00ca92 100644 (file)
 # Author: Guillaume Pellerin <yomguy@parisson.com>
 
 from timeside.core import *
-from timeside.graph.api import IMediaItemGrapher
+from timeside.graph.api import IGrapher
 from tempfile import NamedTemporaryFile
 from timeside.graph.wav2png import *
 
 class WaveFormGrapherAudiolab(Component):
     """WaveForm graph driver (python style thanks to wav2png.py and scikits.audiolab)"""
 
-    implements(IMediaItemGrapher)
+    implements(IGrapher)
 
     bg_color = None
     color_scheme = None
 
-    def get_id(self):
+    def id(self):
         return "waveform_audiolab"
 
-    def get_name(self):
+    def name(self):
         return "Waveform (audiolab)"
 
     def set_colors(self, background=None, scheme=None):
@@ -58,7 +58,7 @@ class WaveFormGrapherAudiolab(Component):
             image_height = 200
 
         fft_size = 2048
-        args = (wav_file, pngFile.name, image_width, image_height, fft_size, 
+        args = (wav_file, pngFile.name, image_width, image_height, fft_size,
                 self.bg_color, self.color_scheme)
         create_wavform_png(*args)
 
diff --git a/tests/test.py b/tests/test.py
new file mode 100755 (executable)
index 0000000..cc1f6b4
--- /dev/null
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import timeside
+from timeside.core import Component, ExtensionPoint, ComponentManager
+
+class TestAnalyzers(Component):
+    analyzers = ExtensionPoint(timeside.analyze.IAnalyzer)
+
+    def run(self):
+        analyzers = []
+        for analyzer in self.analyzers:
+            analyzers.append({'name':analyzer.name(),
+                            'id':analyzer.id(),
+                            'unit':analyzer.unit(),
+                            })
+        print analyzers
+
+class TestDecoders(Component):
+    decoders = ExtensionPoint(timeside.decode.IDecoder)
+
+    def run(self):
+        decoders = []
+        for decoder in self.decoders:
+            decoders.append({'format':decoder.format(),
+                            'mime_type':decoder.mime_type(),
+                            })
+        print decoders
+
+
+class TestEncoders(Component):
+    encoders = ExtensionPoint(timeside.encode.IEncoder)
+
+    def run(self):
+        encoders = []
+        for encoder in self.encoders:
+            encoders.append({'format':encoder.format(),
+                            'mime_type':encoder.mime_type(),
+                            })
+        print encoders
+
+class TestGraphers(Component):
+    graphers = ExtensionPoint(timeside.graph.IGrapher)
+
+    def run(self):
+        graphers = []
+        for grapher in self.graphers:
+            graphers.append({'id':grapher.id(),
+                            'name':grapher.name(),
+                            })
+        print graphers
+
+if __name__ == '__main__':
+    comp_mgr = ComponentManager()
+    a = TestAnalyzers(comp_mgr)
+    d = TestDecoders(comp_mgr)
+    e = TestEncoders(comp_mgr)
+    g = TestGraphers(comp_mgr)
+    a.run()
+    d.run()
+    e.run()
+    g.run()
+