]> git.parisson.com Git - telemeta.git/commitdiff
Made Mp3Exporter a generator. The exported file is still written in the cache.
authorjulia <>
Fri, 11 May 2007 15:09:34 +0000 (15:09 +0000)
committerjulia <>
Fri, 11 May 2007 15:09:34 +0000 (15:09 +0000)
telemeta/export/__init__.py
telemeta/export/core.py
telemeta/export/flac.py
telemeta/export/mp3.py
telemeta/export/ogg.py
telemeta/urls.py
tests/export_test.py

index 6ba2ef16d52301d77454e8f079560ee381612c16..0e05c9962ae17edda10b035483abbd0df93e8369 100644 (file)
@@ -1,6 +1,6 @@
 from telemeta.export.api import *
 from telemeta.export.core import *
-from telemeta.export.ogg import *
-from telemeta.export.flac import *
-from telemeta.export.wav import *
+#from telemeta.export.ogg import *
+#from telemeta.export.flac import *
+#from telemeta.export.wav import *
 from telemeta.export.mp3 import *
\ No newline at end of file
index 7e176328e3540d45684468451d4eeb2250368c27..0378a7e99fb2c9a060fe8ad8d0b39e25ad64b63b 100644 (file)
@@ -96,7 +96,7 @@ class ExporterCore(Component):
         xml.dom.ext.PrettyPrint(doc, xml_file)
         xml_file.close()
 
-    def pre_process(self, item_id, source, metadata, ext, 
+    def pre_process(self, item_id, source, metadata, ext, \
                     cache_dir, options=None):
         """ Pre processing of the core. Prepare the export path and
         return it"""
index 6806d9196a10e028df9174e62ffe4d6156c19d91..ee6b247e520152a950a76662bdc264c6e8ed6553 100644 (file)
@@ -92,6 +92,7 @@ class FlacExporter(ExporterCore):
         
         if not options is None:
             self.options = options
+            
             if 'verbose' in self.options and self.options['verbose'] != '0':
                 args = args
             else:
@@ -118,7 +119,7 @@ class FlacExporter(ExporterCore):
             os.system('flac '+args+' -o "'+self.dest+'" "'+ \
                       self.source+'" > /dev/null')
 
-            # Pre-proccessing (self)
+            # Post-proccessing (self)
             self.write_tags()
             self.post_process(self.item_id,
                          self.source,
index 1cb58cad8b10634cb742970d88232128bdd7de8e..87eda98ed88e4f06462384f8b75a29252be5b279 100644 (file)
@@ -12,6 +12,7 @@
 
 import os
 import string
+import subprocess
 
 from telemeta.export.core import *
 from telemeta.export.api import IExporter
@@ -32,6 +33,7 @@ class Mp3Exporter(ExporterCore):
         self.dest = ''
         self.options = {}
         self.bitrate_default = '192'
+        self.buffer_size = 0xFFFF
         self.dub2id3_dict = {'title': 'TIT2', #title2
                              'creator': 'TCOM', #composer
                      'creator': 'TPE1', #lead
@@ -95,7 +97,7 @@ class Mp3Exporter(ExporterCore):
         self.options = {}
         args = ''
         
-        if not options is None:
+        if not options is None: 
             self.options = options
             
             if 'verbose' in self.options and self.options['verbose'] != '0':
@@ -106,9 +108,8 @@ class Mp3Exporter(ExporterCore):
             if 'mp3_bitrate' in self.options:
                 args = args+'-b '+self.options['mp3_bitrate']
             else:
-                args = args+'-b '+self.bitrate_default
-                
-                #Copyrights, etc..
+                args = args+'-b '+self.bitrate_default    
+            #Copyrights, etc..
             args = args + ' -c -o '
         else:
             args = args + ' -S -c -o '
@@ -126,11 +127,38 @@ class Mp3Exporter(ExporterCore):
                             self.cache_dir,
                             self.options)
             
+            # Initializing
+            chunk = 0
+            file_out = open(self.dest,'w')
+            
+            proc = subprocess.Popen( \
+                    #'sox "'+self.source+'" -w -r 44100 -t wav -c2 - '+ 
+                    #'| lame '+args+' --tc "default" -',
+                    'lame '+args+' --tc "default" "'+self.source+'" -',
+                    shell=True,
+                    bufsize=self.buffer_size,
+                    stdin=subprocess.PIPE,
+                    stdout=subprocess.PIPE,
+                    close_fds=True)
+                
+            chunk = proc.stdout.read(self.buffer_size)
+            yield chunk
+            file_out.write(chunk)
+           
+            # Processing
+            while chunk:
+                chunk = proc.stdout.read(self.buffer_size)
+                yield chunk
+                file_out.write(chunk)           
+            
+            #file_in.close()
+            file_out.close()
+            
             # Encoding
-            os.system('lame '+args+' --tc "default" "'+self.source+
-                                    '" "'+self.dest+'"')
+            os.system('lame '+args+' --tc "default" "'+self.source+
+            #                        '" "'+self.dest+'"')
             
-            # Pre-proccessing (self)
+            # Post-proccessing (self)
             self.write_tags()
             self.post_process(self.item_id,
                          self.source,
@@ -140,8 +168,8 @@ class Mp3Exporter(ExporterCore):
                          self.options)
                         
             # Output
-            return self.dest
+            return self.dest
 
         except IOError:
-            return 'ExporterError [3]: source file does not exist.'
+            yield 'ExporterError [3]: source file does not exist.'
 
index 3ebe7c8560ba287e4200a3343eed62a7e1b69c4b..509e9d28547df4f9aea93793ed0cdc24045b4add 100644 (file)
@@ -12,6 +12,7 @@
 
 import os
 import string
+import subprocess
 
 from telemeta.export.core import *
 from telemeta.export.api import IExporter
@@ -31,7 +32,8 @@ class OggExporter(ExporterCore):
         self.dest = ''
         self.options = {}
         self.bitrate_default = '192'
-
+        self.buffer_size = 0xFFFF
+        
     def get_format(self):
         return 'OGG'
     
@@ -71,7 +73,8 @@ class OggExporter(ExporterCore):
         for tag in self.metadata.keys():
             media[tag] = str(self.metadata[tag])
         media.save()
-        
+
+
     def process(self, item_id, source, metadata, options=None):
         self.item_id = item_id
         self.source = source
@@ -97,35 +100,56 @@ class OggExporter(ExporterCore):
         else:
             args = ' -Q -b '+self.bitrate_default
             
-        if os.path.exists(self.source) and not iswav16(self.source):
-            self.source = self.decode()
-            
+        #if os.path.exists(self.source) and not iswav16(self.source):
+        #    self.source = self.decode()
+        
+        # Pre-processing
+        self.ext = self.get_file_extension()
+        self.dest = self.pre_process(self.item_id,
+                                     self.source,
+                                     self.metadata,
+                                     self.ext,
+                                     self.cache_dir,
+                                     self.options)
+       
         try:
-            # Pre-proccessing (core)
-            self.ext = self.get_file_extension()
-            self.dest = self.pre_process(self.item_id,
+            # Initializing
+            chunk = 0
+            file_out = open(self.dest,'w')
+            
+            proc = subprocess.Popen( \
+                    'sox "'+self.source+'" -w -r 44100 -t wav -c2 - '+
+                    '| oggenc '+args+' -',
+                    shell=True,
+                    bufsize=self.buffer_size,
+                    stdin=subprocess.PIPE,
+                    stdout=subprocess.PIPE,
+                    close_fds=True)
+
+            chunk = proc.stdout.read(self.buffer_size)
+            yield chunk
+            file_out.write(chunk)
+           
+            # Processing
+            while chunk:
+                chunk = proc.stdout.read(self.buffer_size)
+                yield chunk
+                file_out.write(chunk)           
+            
+            #file_in.close()
+            file_out.close()
+                
+            # Post-proccessing
+            #os.system('sox "'+self.source+'" -w -r 44100 -t wav -c2 - \
+            #      | oggenc '+args+' -o "'+self.dest+'" -')
+  
+            self.write_tags()
+            self.post_process(self.item_id,
                             self.source,
                             self.metadata,
                             self.ext,
                             self.cache_dir,
                             self.options)
-            
-            # Encoding
-            os.system('oggenc '+args+' -o "'+self.dest+
-                      '" "'+self.source+'"')
-            
-            # Pre-proccessing (self)
-            self.write_tags()
-            self.post_process(self.item_id,
-                         self.source,
-                         self.metadata,
-                         self.ext,
-                         self.cache_dir,
-                         self.options)
-                        
-            # Output
-            return self.dest
-
+               
         except IOError:
-            return 'ExporterError [3]: source file does not exist.'
-
+            yield 'ExporterError [3]: source file does not exist.'
index c352c1ef76a3a5d6904823ca708eb0394539e3f8..3779677e0159c2b9bc7f3fc7b5f21252b7c03328 100644 (file)
@@ -80,5 +80,3 @@ urlpatterns = patterns('',
     (r'^images/(?P<path>.*)$', 'django.views.static.serve', 
         {'document_root': './telemeta/htdocs/images'}),
 )
-
-
index c0afd45ca3b630a777bb6dbfa0b4653fb07ad13f..cdf7d988103c08ed983bfd7763ca0fa5293aaa63 100644 (file)
@@ -17,8 +17,9 @@ from telemeta.core import *
 from telemeta.core import ComponentManager
 
 cache_dir = 'cache/'
-source = 'samples/wav/Cellar - Show Me - 02.wav'
-item_id = '1'
+source = 'samples/wav/The Chicken-James Brown.wav'
+#source = 'samples/wav/Cellar - Show Me - 02.wav'
+item_id = '10'
 metadata = {'identifier': 'Test',  #collection
          'title': 'Show Me',
          'creator': 'Cellar',
@@ -26,10 +27,10 @@ metadata = {'identifier': 'Test',  #collection
          'date': '2004',
          'publisher': 'PArISs0n',
          }
-options = {'verbose': '0'}
-
+options = {'verbose': '1'}
 
 class ExportTest(Component):
+    
     exporters = ExtensionPoint(IExporter)
 
     def run(self):
@@ -40,10 +41,11 @@ class ExportTest(Component):
                 print '| Testing exporter format: ' + format
                 print "+------------------------------------------"
             exporter.set_cache_dir(cache_dir)
-            exporter.process(item_id,source,metadata,options)
-            #exporter.process(item_id,source,metadata)
-
+            stream = exporter.process(item_id,source,metadata,options)
 
+            for chunk in stream:
+                pass
+            
 compmgr = ComponentManager()
 test = ExportTest(compmgr)
 test.run()