]> git.parisson.com Git - timeside.git/commitdiff
Fix parameter handling in server + Add Elan export for Segment Label object
authorThomas Fillon <thomas@parisson.com>
Tue, 17 Mar 2015 18:02:23 +0000 (19:02 +0100)
committerThomas Fillon <thomas@parisson.com>
Tue, 17 Mar 2015 18:02:23 +0000 (19:02 +0100)
timeside/core/analyzer.py
timeside/server/serializers.py

index 0f59b66e79e3bad52536bfd96254085b645b436a..1157fea58bfdb9dd1cb87e02255612fa0b7d6fda 100644 (file)
@@ -34,7 +34,7 @@ from timeside.core.api import IAnalyzer
 import numpy as np
 from collections import OrderedDict
 import h5py
-
+import simplejson as json
 
 import os
 
@@ -928,6 +928,25 @@ class SegmentLabelObject(LabelObject, SegmentObject):
         #Create legend from custom artist/label lists
         ax.legend(artist.values(), self.label_metadata.label.values())
 
+    def to_elan(self, elan_file, media_file=None):
+        import pympi
+        elan = pympi.Elan.Eaf(author='TimeSide')
+        if media_file is not None:
+            elan.add_linked_file(media_file)
+        for label in self.label_metadata.label.values():
+            elan.add_tier(label)
+        for n in xrange(len(self.label)):
+            label_id = self.label[n]
+            tier_id = self.label_metadata.label[unicode(label_id)]
+            start = self.time[n]
+            end = start + self.duration[n]
+            # Time has to be converted in millisecond integer values
+            elan.add_annotation(id_tier=tier_id,
+                                start=int(start*1000),
+                                end=int(end*1000))
+        
+        elan.to_file(elan_file)
+
 
 class AnalyzerResultContainer(dict):
 
@@ -1008,8 +1027,7 @@ class AnalyzerResultContainer(dict):
 
     def to_json(self, output_file=None):
         #if data_list == None: data_list = self.results
-        import simplejson as json
-
+        
         # Define Specialize JSON encoder for numpy array
         def NumpyArrayEncoder(obj):
             if isinstance(obj, np.ndarray):
@@ -1029,8 +1047,7 @@ class AnalyzerResultContainer(dict):
             return json_str
 
     def from_json(self, json_str):
-        import simplejson as json
-
+        
         # Define Specialize JSON decoder for numpy array
         def NumpyArrayDecoder(obj):
             if isinstance(obj, dict) and 'numpyArray' in obj:
@@ -1203,6 +1220,8 @@ class Analyzer(Processor):
         result.audio_metadata.is_segment = self.mediainfo()['is_segment']
         result.audio_metadata.channels = self.channels()
 
+        result.parameters = json.loads(self.get_parameters())
+
         if time_mode == 'framewise':
             result.data_object.frame_metadata.samplerate = self.result_samplerate
             result.data_object.frame_metadata.blocksize = self.result_blocksize
index 08ac32a4bd79ed5bc8929151705b23ed08ec4bb3..44822c4845b38f165d8eb7d4821315649de07a4e 100644 (file)
@@ -82,6 +82,8 @@ class PresetSerializer(serializers.ModelSerializer):
                 msg = '\n'.join(['KeyError :' + unicode(e), default_msg])
                 raise serializers.ValidationError(msg)
 
+        processor.set_parameters(attrs[source])
+        attrs[source] =  processor.get_parameters()
         return attrs