]> git.parisson.com Git - telemeta.git/commitdiff
fix timeside, analyzers back, works well through django runserver, but not yet with...
authoryomguy <>
Fri, 3 Sep 2010 08:23:44 +0000 (08:23 +0000)
committeryomguy <>
Fri, 3 Sep 2010 08:23:44 +0000 (08:23 +0000)
telemeta/templates/telemeta_default/mediaitem_detail.html
telemeta/urls.py
telemeta/util/__init__.py
telemeta/util/logger.py
telemeta/web/__init__.py
telemeta/web/base.py

index 3f5c8c528738a6b1def3eab99e4537933f57528e..4133495e49bebe9f10a41139178e3b6b377d74dc 100644 (file)
@@ -80,7 +80,7 @@ load_player({{ item.approx_duration.as_seconds }});
                 <input type="submit" value="Set" />\r
             </form>\r
 \r
-<!--          <div class="analyzer">\r
+          <div class="analyzer">\r
             <table width="100%">\r
              <tr class="analyzer-title">\r
               <td>Property</td>\r
@@ -101,7 +101,7 @@ load_player({{ item.approx_duration.as_seconds }});
             </tr>\r
             {% endfor %}\r
            </table>\r
-         </div>-->\r
+         </div>\r
 <!--\r
         <form method="get" action="#">\r
             <p>&nbsp;Vamp plugin analysis</p>\r
index 3fc26b3949ccf811ddbe12ded38a6eb288eed1ec..41dc1309e842c4d3a376d20eba686d8bf8685cda 100644 (file)
@@ -37,7 +37,7 @@
 from django.conf.urls.defaults import *
 from telemeta.models import MediaItem, MediaCollection
 #from telemeta.core import ComponentManager
-from telemeta.web import WebView
+from telemeta.web.base import WebView
 import os.path
 import telemeta.config
 
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8674a000aaf40ed48e62acb3b27dda5bb9851183 100644 (file)
@@ -0,0 +1 @@
+from telemeta.util import *
index b6f54ca379f8df6a6b214da197823e27210801ed..41ed008610527786f9e3860f61418f278744f123 100644 (file)
@@ -1,13 +1,23 @@
 
+import logging
+
 class Logger:
-    "Provide simple message logging"
+    """A logging object"""
+
+    def __init__(self, file):
+        self.logger = logging.getLogger('myapp')
+        self.hdlr = logging.FileHandler(file)
+        self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
+        self.hdlr.setFormatter(self.formatter)
+        self.logger.addHandler(self.hdlr)
+        self.logger.setLevel(logging.INFO)
 
-    filename="/tmp/telemeta.log"
+    def write_info(self, message):
+        self.logger.info(message)
 
-    def __init__(self):
-        self.file = open(self.filename, "a")
+    def write_error(self, message):
+        self.logger.error(message)
 
     def debug(self, msg):
-        self.file.write(msg + "\n")
-        self.file.flush()
+        self.logger.error(message)
         
index 6857d9861630c4fdf033f7bab2bff68105d52994..9c3afc8ae80c3a9916f63a004ee027b9f001b747 100644 (file)
@@ -1,2 +1,3 @@
-from telemeta.web.base import WebView
-import pages
+#import telemeta.web.base
+#import telemeta.web.pages
+
index b21b4756d1a64e499ecf2e56221edf34d0e4133d..ddfdc75632373713a14fb834c67505e0576a5aee 100644 (file)
@@ -54,15 +54,16 @@ import telemeta.interop.oai as oai
 from telemeta.interop.oaidatasource import TelemetaOAIDataSource
 from django.core.exceptions import ObjectDoesNotExist
 from telemeta.util.unaccent import unaccent
-from telemeta.web import pages
 from telemeta.util.unaccent import unaccent_icmp
+from telemeta.util.logger import Logger
+import telemeta.web.pages as pages
 
 def render(request, template, data = None, mimetype = None):
     return render_to_response(template, data, context_instance=RequestContext(request), 
                               mimetype=mimetype)
 
-def stream(file):
-    chunk_size = 0x10000
+def stream_from_file(file):
+    chunk_size = 0x1000
     f = open(file,  'r')
     while True:
         _chunk = f.read(chunk_size)
@@ -71,14 +72,23 @@ def stream(file):
         yield _chunk
     f.close()
 
+def stream_from_processor(decoder, processor):
+    while True:
+        frames,  eod = decoder.process()
+        buffer,  eod_proc = processor.process(frames, eod)
+        yield buffer
+        if eod_proc:
+            break
+
 
 class WebView:
     """Provide web UI methods"""
 
-    graphers = timeside.processors(timeside.api.IGrapher)
-    decoders = timeside.processors(timeside.api.IDecoder)
-    encoders= timeside.processors(timeside.api.IEncoder)
-    analyzers = timeside.processors(timeside.api.IAnalyzer)
+    graphers = timeside.core.processors(timeside.api.IGrapher)
+    decoders = timeside.core.processors(timeside.api.IDecoder)
+    encoders= timeside.core.processors(timeside.api.IEncoder)
+    analyzers = timeside.core.processors(timeside.api.IAnalyzer)
+    logger = Logger('/tmp/telemeta.log')
     
     def index(self, request):
         """Render the homepage"""
@@ -152,6 +162,7 @@ class WebView:
                     })
 
     def item_visualize(self, request, public_id, visualizer_id, width, height):
+        mime_type = 'image/png'
         grapher_id = visualizer_id
         for grapher in self.graphers:
             if grapher.id() == grapher_id:
@@ -159,19 +170,22 @@ class WebView:
 
         if grapher.id() != grapher_id:
             raise Http404
-
+        
         media = settings.TELEMETA_DATA_CACHE_DIR + \
                     os.sep + '_'.join([public_id,  grapher_id,  width,  height]) + '.png'
+
         #graph.set_colors((255,255,255), 'purple')
         
         if not os.path.exists(media):
             item = MediaItem.objects.get(public_id=public_id)
             audio = os.path.join(os.path.dirname(__file__), item.file.path)
             decoder  = timeside.decoder.FileDecoder(audio)
-            graph = grapher(width=int(width), height=int(height), output=media)
-            (decoder | graph).run()
-            graph.render()
-        response = HttpResponse(stream(media), mimetype = 'image/png')
+            graph = grapher(width=int(width), height=int(height))
+            pipe = decoder | graph
+            pipe.run()
+            graph.render(media)
+
+        response = HttpResponse(stream_from_file(media), mimetype = mime_type)
         return response
 
     def list_export_extensions(self):
@@ -204,17 +218,19 @@ class WebView:
         print decoder.format(),  mime_type
         if decoder.format() == mime_type:
             # source > stream
-            media = audio
+            response = HttpResponse(stream_from_file(audio), mimetype = mime_type)
         else:        
             if not os.path.exists(media):
                 # source > encoder > stream
-                decoder  = timeside.decoder.FileDecoder(audio)
-                enc = encoder(media)
-                metadata = dublincore.express_item(item).to_list()
+                decoder.setup()
+                proc = encoder(media)
+                proc.setup(decoder.channels(), decoder.samplerate())
+                #metadata = dublincore.express_item(item).to_list()
                 #enc.set_metadata(metadata)
-                (decoder | enc).run()
-            
-        response = HttpResponse(stream(media), mimetype = mime_type)
+                response = HttpResponse(stream_from_processor(decoder, proc), mimetype = mime_type)
+            else:
+                response = HttpResponse(stream_from_file(media), mimetype = mime_type)
+        
         response['Content-Disposition'] = 'attachment'
         return response