]> git.parisson.com Git - timeside.git/commitdiff
get decoder by mime type, cross coding tests
authoryomguy <yomguy@parisson.com>
Tue, 24 Nov 2009 16:48:05 +0000 (16:48 +0000)
committeryomguy <yomguy@parisson.com>
Tue, 24 Nov 2009 16:48:05 +0000 (16:48 +0000)
decode/core.py
decode/flac.py
decode/mp3.py
decode/ogg.py
decode/wav.py
encode/flac.py
tests/samples/sweep.wav
tests/test.py

index 6065a402882b7ba3ece2dfd128771f6cc28b62e9..abbe37c3f1b41b9a3d683c72678d6ac57736e989 100644 (file)
@@ -60,7 +60,7 @@ class DecoderCore(Component):
     paths, metadata parsing, data streaming thru system command"""
 
     def __init__(self):
-        self.command = 'sox "%s" -s -q -b 16 -r 44100 -t wav -c2 -'
+        self.command = 'sox "%s" -q -b 16 -r 44100 -t wav -c2 - '
 
     def process(self, source, options=None):
         """Encode and stream audio data through a generator"""
index 02eed2b2cfe96e3696a2a695e40c0e24b380a792..44733d747707f27f389c4ec25739606c2214d82d 100644 (file)
@@ -40,7 +40,7 @@ class FlacDecoder(DecoderCore):
         return 'flac'
 
     def mime_type(self):
-        return 'application/flac'
+        return 'audio/x-flac'
 
     def description(self):
         return """
index 6918b9b1b5487fafeaf6c95265dbb6d4d9f2a7ab..8f1f1e51e0f1c35049dc74ee6fba5a274ae116bd 100644 (file)
@@ -33,6 +33,9 @@ class Mp3Decoder(DecoderCore):
 
     implements(IDecoder)
 
+    def __init__(self):
+        self.command = 'sox -t mp3 "%s" -q -b 16 -r 44100 -t wav -c2 - '
+
     def format(self):
         return 'MP3'
 
index c1a9cad55fdd67a39a3691af88d032a0f3d0c13e..280b3c73cdca1e2149243bd79dc81f7f23fd9ab3 100644 (file)
@@ -32,11 +32,6 @@ class OggDecoder(DecoderCore):
 
     implements(IDecoder)
 
-    def __init__(self):
-        self.dub2args_dict = {'creator': 'artist',
-                             'relation': 'album'
-                             }
-
     def format(self):
         return 'OggVorbis'
 
index 995b4a41b4a302492e266dcad4ab0944eabaeb61..8012f2826215380a4d001b9dbad1acf4394144e0 100644 (file)
@@ -21,6 +21,7 @@
 
 import os
 import string
+import subprocess
 
 from timeside.decode.core import *
 from timeside.decode.api import IDecoder
index a9ea413b4f53ccdbadebb2ee962f1f95a40f26d4..8c38ac2e8367aff05e4597836f665ef63bf3f408 100644 (file)
@@ -45,7 +45,7 @@ class FlacEncoder(EncoderCore):
         return 'flac'
 
     def mime_type(self):
-        return 'application/flac'
+        return 'audio/x-flac'
 
     def description(self):
         return """
index 9c2febe600c2a5bdb3304c5616804e906452301a..bc6411851b2819f4f74a9dbcf6d4e5504962a5af 100644 (file)
Binary files a/tests/samples/sweep.wav and b/tests/samples/sweep.wav differ
index 39168200fdde50537301bdbda312af49431c7c21..d2fe7c77d1e865766673a6d52179f01b6236562a 100755 (executable)
@@ -1,7 +1,9 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 
+import os
 import timeside
+import magic
 from timeside.core import Component, ExtensionPoint, ComponentManager
 
 
@@ -29,18 +31,38 @@ class TestDecoders(Component):
     decoders = ExtensionPoint(timeside.decode.IDecoder)
 
     def list(self):
-        decoders = []
+        decoders_list = []
         for decoder in self.decoders:
-            decoders.append({'format':decoder.format(),
-                            'mime_type':decoder.mime_type(),
+            decoders_list.append({'format': decoder.format(),
+                            'mime_type': decoder.mime_type(),
+                            'file_extension': decoder.file_extension(),
                             })
-        print decoders
+        print decoders_list
 
-    def run(self, media, format):
+    def get_decoder(self, mime_type):
         for decoder in self.decoders:
-            if decoder.format() == format:
-                return decoder.process(media)
-
+            if decoder.mime_type() == mime_type:
+                return decoder
+
+    def export(self, media_dir):
+        files = os.listdir(media_dir)
+        m = magic.Magic(mime=True)
+        for file in files:
+            media = media_dir + os.sep + file
+            magic_file = m.from_file(media)
+            mime = magic_file.lower()
+            print mime
+            file_ext = file.split('.')[-1]
+            decoder = self.get_decoder(mime)
+            if decoder:
+                stream = decoder.process(media)
+                print decoder.command
+                file_path = 'results/sweep' + '_' + file_ext + '.wav'
+                f = open(file_path, 'w')
+                for chunk in stream:
+                    f.write(chunk)
+                    f.flush()
+                f.close()
 
 class TestEncoders(Component):
     encoders = ExtensionPoint(timeside.encode.IEncoder)
@@ -48,17 +70,26 @@ class TestEncoders(Component):
     def list(self):
         encoders = []
         for encoder in self.encoders:
-            encoders.append({'format':encoder.format(),
-                            'mime_type':encoder.mime_type(),
+            encoders.append({'format': encoder.format(),
+                            'mime_type': encoder.mime_type(),
                             })
         print encoders
 
+    def get_encoder(self, mime_type):
+        for encoder in self.encoders:
+            if encoder.mime_type() == mime_type:
+                return encoder
+
     def run(self, source, metadata):
         print '\n=== Encoder testing ===\n'
         for encoder in self.encoders:
+            m = magic.Magic(mime=True)
+            magic_file = m.from_file(source)
+            mime = magic_file.lower()
             format = encoder.format()
             decoders = TestDecoders(comp_mgr)
-            decoded = decoders.run(source, 'WAV')
+            decoder = decoders.get_decoder(mime)
+            decoded = decoder.process(source)
             ext = encoder.file_extension()
             stream = encoder.process(decoded, metadata)
             file_path = 'results/sweep' + '.' + ext
@@ -95,7 +126,7 @@ class TestGraphers(Component):
 
 
 if __name__ == '__main__':
-    sample = 'samples/sweep.wav'
+    sample = 'samples/sweep_source.wav'
     metadata = (('creator', 'yomguy'), ('date', '2009'), ('name', 'test'))
     comp_mgr = ComponentManager()
     a = TestAnalyzers(comp_mgr)
@@ -109,5 +140,6 @@ if __name__ == '__main__':
     a.run(sample)
     g.run(sample)
     e.run(sample, metadata)
+    d.export('samples/')