From: yomguy Date: Tue, 24 Nov 2009 16:48:05 +0000 (+0000) Subject: get decoder by mime type, cross coding tests X-Git-Tag: 0.3.2~233 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=0cbd4af23517f437de8a62ea6fa6fd923f5981e9;p=timeside.git get decoder by mime type, cross coding tests --- diff --git a/decode/core.py b/decode/core.py index 6065a40..abbe37c 100644 --- a/decode/core.py +++ b/decode/core.py @@ -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""" diff --git a/decode/flac.py b/decode/flac.py index 02eed2b..44733d7 100644 --- a/decode/flac.py +++ b/decode/flac.py @@ -40,7 +40,7 @@ class FlacDecoder(DecoderCore): return 'flac' def mime_type(self): - return 'application/flac' + return 'audio/x-flac' def description(self): return """ diff --git a/decode/mp3.py b/decode/mp3.py index 6918b9b..8f1f1e5 100644 --- a/decode/mp3.py +++ b/decode/mp3.py @@ -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' diff --git a/decode/ogg.py b/decode/ogg.py index c1a9cad..280b3c7 100644 --- a/decode/ogg.py +++ b/decode/ogg.py @@ -32,11 +32,6 @@ class OggDecoder(DecoderCore): implements(IDecoder) - def __init__(self): - self.dub2args_dict = {'creator': 'artist', - 'relation': 'album' - } - def format(self): return 'OggVorbis' diff --git a/decode/wav.py b/decode/wav.py index 995b4a4..8012f28 100644 --- a/decode/wav.py +++ b/decode/wav.py @@ -21,6 +21,7 @@ import os import string +import subprocess from timeside.decode.core import * from timeside.decode.api import IDecoder diff --git a/encode/flac.py b/encode/flac.py index a9ea413..8c38ac2 100644 --- a/encode/flac.py +++ b/encode/flac.py @@ -45,7 +45,7 @@ class FlacEncoder(EncoderCore): return 'flac' def mime_type(self): - return 'application/flac' + return 'audio/x-flac' def description(self): return """ diff --git a/tests/samples/sweep.wav b/tests/samples/sweep.wav index 9c2febe..bc64118 100644 Binary files a/tests/samples/sweep.wav and b/tests/samples/sweep.wav differ diff --git a/tests/test.py b/tests/test.py index 3916820..d2fe7c7 100755 --- a/tests/test.py +++ b/tests/test.py @@ -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/')