#!/usr/bin/python # Copyright (c) 2001-2006 MUSIC TECHNOLOGY GROUP (MTG) # UNIVERSITAT POMPEU FABRA # # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import sys import re def Lab2Plot(labfile, output, attributeName, filter, childScope, labelAttribute): print >> output, '' print >> output, '' print >> output, '\t' tokens = list() labelFilter = re.compile(filter) for line in labfile: segment = line.split(" ",3) if len(segment)!=3: print >> sys.stderr, "Found a line with %s tokens, 3 expected"%len(segment) continue segment[2]=segment[2].rstrip().lstrip() if not labelFilter.match(segment[2]): continue tokens.append(segment) sampleRate=44100 print >> output, '\t\t'%(attributeName, len(tokens)) , for segment in tokens : print >> output, float(segment[0])*sampleRate, float(segment[1])*sampleRate, print >> output, '' print >> output, '\t' if childScope!=None: print >> output, '\t' % (childScope, len(tokens)) print >> output, '\t\t' % (labelAttribute) for segment in tokens : print >> output, '\t\t\t%s' % ( segment[2] ) print >> output, '\t\t' print >> output, '\t' print >> output, '' return dict.fromkeys([ segment[2] for segment in tokens ]).keys() # unique labels if __name__ == "__main__": # Default parameters filter = '.*' childScope = None labelAttribute = None if len(sys.argv) == 3: (labfilename,attributeName) = sys.argv[1:3] elif len(sys.argv) == 4: (labfilename,attributeName,filter) = sys.argv[1:4] elif len(sys.argv) == 5: (labfilename,attributeName,childScope,labelAttribute) = sys.argv[1:5] elif len(sys.argv) == 6: (labfilename,attributeName,filter,childScope,labelAttribute) = sys.argv[1:6] else: print >> sys.stderr, "Lab2Pools v1.0: Wavesurfer Lab file to CLAM Annotator pools converter" print >> sys.stderr print >> sys.stderr, "Usage: " + sys.argv[0] + " [] [ ]" print >> sys.stderr print >> sys.stderr, " An annotation file from wave surfer" print >> sys.stderr, " Attribute name for the segmentation" print >> sys.stderr, " A regular expresion to filter segments by label (default: all segments)" print >> sys.stderr, " If defined the child scope that should contain the label attribute (by default it is discarded)" print >> sys.stderr, " The attribute that holds the label" sys.exit() print Lab2Plot( file(labfilename), file(labfilename+".pool","w"), attributeName, filter, childScope, labelAttribute)