def addFeature(self, definition):
     """
         Add a feature defined according the :ref:`feature definition syntax <featplan>`.
         
         :param definition: feature definition
         :type definition: string
         :rtype: True on success, False on fail.
     """
     data = definition.split(':')
     if not len(data) == 2:
         print 'Syntax error in "%s"' % definition
         return False
     name, featdef = data
     dataflow = DataFlow()
     inputNode = dataflow.createInput('audio', self.audio_params)
     if featdef.strip():
         for s in featdef.split('>'):
             s = s.strip()
             bb = s.split(' ')
             feat = AudioFeatureFactory.get_feature(bb[0])
             if not feat:
                 return False
             params = {}
             for d in bb[1:]:
                 if len(d) == 0:
                     continue
                 if not '=' in d:
                     print 'Invalid feature parameter "%s"' % d
                     return False
                 dd = d.split('=')
                 if not len(dd) == 2:
                     print 'Syntax error in feature parameter "%s"' % d
                     return False
                 params[dd[0]] = dd[1]
             dataflow.append(feat.get_dataflow(params, self.sample_rate))
     fNode = dataflow.finalNodes()[0]
     feat_attrs = self.out_attrs.copy()
     feat_attrs['yaafedefinition'] = featdef.strip()
     outNode = dataflow.createOutput(name, feat_attrs)
     dataflow.link(fNode, '', outNode, '')
     self.dataflow.merge(dataflow)
     return True
 def addFeature(self, definition):
     """
         Add a feature defined according the :ref:`feature definition syntax <featplan>`.
         
         :param definition: feature definition
         :type definition: string
         :rtype: True on success, False on fail.
     """
     data = definition.split(":")
     if not len(data) == 2:
         print 'Syntax error in "%s"' % definition
         return False
     name, featdef = data
     dataflow = DataFlow()
     inputNode = dataflow.createInput("audio", self.audio_params)
     if featdef.strip():
         for s in featdef.split(">"):
             s = s.strip()
             bb = s.split(" ")
             feat = AudioFeatureFactory.get_feature(bb[0])
             if not feat:
                 return False
             params = {}
             for d in bb[1:]:
                 if len(d) == 0:
                     continue
                 if not "=" in d:
                     print 'Invalid feature parameter "%s"' % d
                     return False
                 dd = d.split("=")
                 if not len(dd) == 2:
                     print 'Syntax error in feature parameter "%s"' % d
                     return False
                 params[dd[0]] = dd[1]
             dataflow.append(feat.get_dataflow(params, self.sample_rate))
     fNode = dataflow.finalNodes()[0]
     feat_attrs = self.out_attrs.copy()
     feat_attrs["yaafedefinition"] = featdef.strip()
     outNode = dataflow.createOutput(name, feat_attrs)
     dataflow.link(fNode, "", outNode, "")
     self.dataflow.merge(dataflow)
     return True