]> git.parisson.com Git - telemeta.git/commitdiff
Moved tolls and main shell scripts to 'old/' (preparing the web interface)
authoryomguy <>
Tue, 10 Apr 2007 15:44:15 +0000 (15:44 +0000)
committeryomguy <>
Tue, 10 Apr 2007 15:44:15 +0000 (15:44 +0000)
20 files changed:
audio_marking.py [deleted file]
audio_tools.py [deleted file]
collection.py [deleted file]
configure-stamp [deleted file]
consts.py [deleted file]
default_options.py [deleted file]
default_tags.py [deleted file]
install.py [changed mode: 0755->0644]
old/audio_marking.py [new file with mode: 0644]
old/audio_tools.py [new file with mode: 0644]
old/collection.py [new file with mode: 0644]
old/consts.py [new file with mode: 0644]
old/default_options.py [new file with mode: 0644]
old/default_tags.py [new file with mode: 0644]
old/tag_tools.py [new file with mode: 0644]
old/telemeta.py [new file with mode: 0644]
old/typeToolBox.py [new file with mode: 0644]
tag_tools.py [deleted file]
telemeta.py [deleted file]
typeToolBox.py [deleted file]

diff --git a/audio_marking.py b/audio_marking.py
deleted file mode 100755 (executable)
index b9ce93c..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-import os, sys, re, string
-import tag_tools
-from audio_tools import *
-
-def make_auto_mark(dir_in,file_in):
-       media_in = dir_in+file_in
-       artist_no_ = string.replace(tag_tools.get_tag_value('ARTIST'),'_',' ')
-       title_no_ = string.replace(tag_tools.get_tag_value('TITLE'),'_',' ')
-       description_no_ = string.replace(tag_tools.get_tag_value('COMMENT'),'_',' ')
-       os.system('echo "This is: '+title_no_+'. By '+artist_no_+'. It is '+description_no_+'" | text2wave -f 44100 -o "'+media_in+'_mark.tmp"')
-       #os.system('normalize-audio "'+media_in+'_mark.tmp"')
-       os.system('sox "'+media_in+'_mark.tmp" -t wav -c2 "'+media_in+'_mark.wav" vol 10.0 dB compand 50,20 -80,-80,-25,-35,-15,-27,-5,-19,0,-15 15')
-       os.system('rm '+dir_in+'*.tmp')
-
-def mark_audio(dir_in,file_in,audio_marking_file,audio_marking_timeline):
-       media_in = dir_in+file_in
-       file_length_sec = audio_length_sec(media_in)
-       audio_mark_length_sec = audio_length_sec(audio_marking_file)
-       ecasound_phrase = ''
-       audio_gain = str(100+100*len(audio_marking_timeline))
-
-       for timeline in audio_marking_timeline:
-               audio_marking_ecasound_filename = file_in+'_'+timeline+'.ewf'
-               audio_marking_ecasound_path = dir_in+file_in+'_'+timeline+'.ewf'
-               audio_marking_ecasound_file=open(audio_marking_ecasound_path,'w')
-               audio_marking_ecasound_file.write('-- '+audio_marking_ecasound_filename+' --\n')
-               audio_marking_ecasound_file.write('source = '+audio_marking_file+'\n')
-               if timeline == 'b':
-                       mark_offset = '0'
-                       ecasound_phrase = '-a:2 -i:"'+audio_marking_ecasound_path+'" -ea:'+audio_gain+' '
-               if timeline == 'm':
-                       mark_offset = str(file_length_sec/2)
-                       ecasound_phrase = ecasound_phrase+'-a:3 -i:"'+audio_marking_ecasound_path+'" -ea:'+audio_gain+' '
-               if timeline == 'e':
-                       mark_offset = str(file_length_sec-audio_mark_length_sec)
-                       ecasound_phrase = ecasound_phrase+'-a:4 -i:"'+audio_marking_ecasound_path+'" -ea:'+audio_gain+' '
-               audio_marking_ecasound_file.write('offset = '+mark_offset+'.0\n')
-               audio_marking_ecasound_file.write('start-position = 0.0\n')
-               audio_marking_ecasound_file.write('length = '+str(audio_mark_length_sec)+'.0\n')
-               audio_marking_ecasound_file.write('looping = false\n')
-               audio_marking_ecasound_file.write('--cut--\n')
-               audio_marking_ecasound_file.close()
-       os.system('ecasound -a:1 -i:"'+media_in+'" -ea:'+audio_gain+' '+ecasound_phrase+' -a:all -o "'+dir_in+'marked_'+file_in+'"')
-
diff --git a/audio_tools.py b/audio_tools.py
deleted file mode 100755 (executable)
index 0c2ea7a..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-import os, sys, re, string
-import tag_tools
-from audio_tools import *
-
-def encode(enc_type,dir_in,file_in,dir_out,file_out):
-       media_in = dir_in+file_in
-       media_out = dir_out+file_out
-
-       if enc_type == 'flac' :
-               quality = tag_tools.get_opt_value(enc_type+'_quality')
-               os.system('flac -f -V -q '+quality+' -o "'+media_out+'" "'+media_in+'"')
-
-       if enc_type == 'ogg':
-               bitrate = tag_tools.get_opt_value(enc_type+'_bitrate')
-               os.system('oggenc -b '+bitrate+' -o "'+media_out+'" "'+media_in+'"')
-
-       if enc_type == 'mp3':
-               bitrate = tag_tools.get_opt_value(enc_type+'_bitrate')
-               tag='temp'
-               os.system('lame -b '+tag+' --ta "'+tag+'" --tt "'+tag+'" --tl "'+tag+'" --ty '+tag+' --tg "Other" --tc "'+tag+'" "'+media_in+'" "'+media_out+'"')
-
-       if enc_type == 'wav':
-               if iswav16(media_in):
-                       os.system('cp -a "'+media_in+'" "'+media_out+'"')
-               else:
-                       os.system('sox "'+media_in+'" -w -r 44100 -t wav -c2 "'+media_out+'"')
-
-#      if enc_type == 'ogg' and ismp3(media_in):
-#                os.system('mp32ogg --verbose "'+file_in+'" "'+file_out+'"')
-
-def decode(media_in,file_ext):
-       if ismp3(media_in) or file_ext == 'mp3':
-               os.system('mpg123 -q -s "'+media_in+'" -w "'+media_in+'.wav"')
-       if isogg(media_in) or file_ext == 'ogg':
-               os.system('oggdec -o "'+media_in+'.wav" "'+media_in+'"')
-       if isflac(media_in) or file_ext == 'flac':
-               os.system('flac -d "'+media_in+'"')
-       if iswav(media_in) or file_ext == 'wav':
-               os.system('sox "'+media_in+'" -w -r 44100 -t wav -c2 "'+media_in+'.wav"')
-       if isaiff(media_in) or file_ext == 'aiff':
-               os.system('sox "'+media_in+'" -w -r 44100 -t aiff -c2 "'+media_in+'.wav"')
-
-def normalize(media_in):
-       os.system('normalize-audio "'+media_in+'"')
-
-def create_md5_key(dir_in,file_in):
-       media_in = dir_in+file_in
-       os.system('md5sum -b "'+media_in+'" "'+media_in+'.md5"')
-
-def check_md5_key(dir_in,file_in):
-       media_in = dir_in+file_in
-       md5_log = os.popen4('md5sum -c "'+media_in+'" "'+media_in+'.md5"')
-       if 'OK' in md5_log.split(':'):
-               return True
-       else:
-               return False
-
-def compare_md5_key(file_in,file_out):
-       media_in = file_in
-       media_out = file_out
-       if not os.path.exists(media_in):
-               return False
-       else:
-               print 'Checking md5sums...'
-               file_in_in, file_in_out = os.popen4('md5sum -b "'+media_in+'"')
-               file_out_in, file_out_out = os.popen4('md5sum -b "'+media_out+'"')
-               for line in file_in_out.readlines():
-                       line = line.split('*')
-                       line = line[0]
-                       #print line
-                       for file_out_out_line in file_out_out.readlines():
-                               file_out_out_line= file_out_out_line.split('*')
-                               file_out_out_line= file_out_out_line[0]
-                               #print file_out_out_line        
-                               if line == file_out_out_line:
-                                       print 'Files are equal...\n'
-                                       return True
-                                       exit
-                               else:
-                                       print 'Files are different...\n'
-                                       return False
-                                       exit
-               
-def create_par_key(dir_in,file_in):
-       media_in = dir_in+file_in
-       os.system('par2 c -n1 "'+media_in+'"')
-
-def recover_par_key(dir_in):
-       for file in os.listdir(dir_in):
-               media_in = dir_in+file
-               if iswav(media_in):
-                       os.system('par2 r "'+media_in+'"')
-
-def verify_par_key(media_in):
-       os.system('par2 v "'+media_in+'.par2"')
-
-def clean_directory(dir_in,type_list):
-       for enc_type in type_list:
-               if os.path.exists(dir_in+enc_type):
-                       print 'Removing '+dir_in+enc_type
-                       os.system('rm -rf "'+dir_in+enc_type+'"')
-
-def audio_length_sec(file) :
-       file_in, file_out = os.popen4('wavinfo "'+file+'" | grep wavDataSize')
-       for line in file_out.readlines():
-               line_split = line.split(':')
-               value = int(int(line_split[1])/(4*44100))
-               return value
-
-def ext_is_audio(file):
-       file_name_woext, file_ext = tag_tools.filename_split(file)
-       return file_ext == "mp3" or file_ext == "ogg" or file_ext == "flac" or file_ext == "wav" or file_ext == "aif" or file_ext == "aiff" or file_ext == "WAV" or file_ext == "AIFF" or file_ext == "AIF" or file_ext == "MP3" or file_ext == "OGG" or file_ext == "FLAC"
-
-def isaudio(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(' ')
-               return (iswav16(file) or iswav(file) or ismp3(file) or isogg(file) or isflac(file) or isaiff(file) or isaiff16(file))
-
-def iswav(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(' ')
-               return ('WAVE' in line_split)
-
-def iswav16(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(' ')
-               return ('WAVE' in line_split) and ('16' in line_split)
-
-def isaiff(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(' ')
-               return ('AIFF' in line_split)
-
-def isaiff16(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(' ')
-               return ('AIFF' in line_split) and ('16' in line_split)
-
-def ismp3(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split_space = line.split(' ')
-               line_split_comma = line.split(',')
-               return (('MPEG' in line_split_space and ' layer III' in line_split_comma) or 'MP3' in line_split_space)
-
-def isogg(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(',')
-               return (' Vorbis audio' in line_split)
-
-def isflac(file) :
-       file_in, file_out = os.popen4('file "'+file+'"')
-       for line in file_out.readlines():
-               line_split = line.split(' ')
-               return ('FLAC' in line_split)
diff --git a/collection.py b/collection.py
deleted file mode 100644 (file)
index 671de22..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-import os, string
-
-class Collection :
-
-       def __init__(self) :
-               self.collection_name = 'telemeta_default'
-               self.collection_dir = '/home/'+os.environ["USER"]+'/telemeta/'
-               self.user_dir = '/home/'+os.environ["USER"]+'/.telemeta/'
-               self.user_tag_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_tags.xml'
-               self.user_collection_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_collection.xml'
-               self.tag_table = 'ARTIST,TITLE,ALBUM,DATE,GENRE,SOURCE,ENCODER,COMMENT'
-               self.type_list = 'mp3,ogg,flac,wav,aiff'
-               self.net_backup_host = 'domain.com'
-               self.net_backup_dir = '/home/'+os.environ["USER"]+'/telemeta/'
-
-#option_table=['enc_types','flac_bitrate','ogg_bitrate','mp3_bitrate','audio_marking','auto_audio_marking','audio_marking_file','audio_marking_timeline']
-
-#questions = ['Output formats','flac_bitrate','ogg_bitrate','mp3_bitrate','Audio marking (y/n)','Auto audio marking (y/n)','Audio marking file path','Audio marking timeline (b)eginning, (m)iddle, (e)nd']
\ No newline at end of file
diff --git a/configure-stamp b/configure-stamp
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/consts.py b/consts.py
deleted file mode 100755 (executable)
index 250daed..0000000
--- a/consts.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-import os, string
-
-class Collection :
-
-       def __init__(self) :
-               self.collection_name = 'telemeta_default'
-               self.collection_dir = '/home/'+os.environ["USER"]+'/telemeta_default/'
-               self.user_dir = '/home/'+os.environ["USER"]+'/.telemeta/'
-               self.default_tag_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_tags.xml'
-               self.default_collection_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_collection.xml'
-               self.tag_table = 'ARTIST,TITLE,ALBUM,DATE,GENRE,SOURCE,ENCODER,COMMENT'
-               self.type_list = 'mp3,ogg,flac,wav,aiff'
-               self.net_backup_host = 'domain.com'
-               self.net_backup_dir = '/home/'+os.environ["USER"]+'/telemeta/'
-
-#option_table=['enc_types','flac_bitrate','ogg_bitrate','mp3_bitrate','audio_marking','auto_audio_marking','audio_marking_file','audio_marking_timeline']
-
-#questions = ['Output formats','flac_bitrate','ogg_bitrate','mp3_bitrate','Audio marking (y/n)','Auto audio marking (y/n)','Audio marking file path','Audio marking timeline (b)eginning, (m)iddle, (e)nd']
\ No newline at end of file
diff --git a/default_options.py b/default_options.py
deleted file mode 100755 (executable)
index 065e97b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-class Options :
-
-       def __init__(self) :
-               self.collection = 'Unknown'
-               self.enc_types = 'flac, ogg, mp3'
-               self.ogg_bitrate ='192'
-               self.mp3_bitrate = '192'
-               self.flac_quality = '5'
-               self.audio_marking = False
-               self.auto_audio_marking = True
-               self.audio_marking_file = '/path/to/file'
-               self.audio_marking_timeline = 'b, m, e'
-               self.par_key = True
-               self.normalize = False
diff --git a/default_tags.py b/default_tags.py
deleted file mode 100755 (executable)
index a03c620..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-class Tags :
-
-       def __init__(self) :
-               self.COLLECTION = 'Unknown'
-               self.ARTIST = 'Unknown'
-               self.TITLE = 'Unknown'
-               self.ALBUM = 'Unknown'
-               self.GENRE = 'Other'
-               self.DATE = '1900'
-               self.SOURCE = 'Here'
-               self.ENCODER = 'me@domain.com'
-               self.COMMENT = 'No comment'
-               self.ORIGINAL_MEDIA = '1/4" tape'
-
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/old/audio_marking.py b/old/audio_marking.py
new file mode 100644 (file)
index 0000000..b9ce93c
--- /dev/null
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+import os, sys, re, string
+import tag_tools
+from audio_tools import *
+
+def make_auto_mark(dir_in,file_in):
+       media_in = dir_in+file_in
+       artist_no_ = string.replace(tag_tools.get_tag_value('ARTIST'),'_',' ')
+       title_no_ = string.replace(tag_tools.get_tag_value('TITLE'),'_',' ')
+       description_no_ = string.replace(tag_tools.get_tag_value('COMMENT'),'_',' ')
+       os.system('echo "This is: '+title_no_+'. By '+artist_no_+'. It is '+description_no_+'" | text2wave -f 44100 -o "'+media_in+'_mark.tmp"')
+       #os.system('normalize-audio "'+media_in+'_mark.tmp"')
+       os.system('sox "'+media_in+'_mark.tmp" -t wav -c2 "'+media_in+'_mark.wav" vol 10.0 dB compand 50,20 -80,-80,-25,-35,-15,-27,-5,-19,0,-15 15')
+       os.system('rm '+dir_in+'*.tmp')
+
+def mark_audio(dir_in,file_in,audio_marking_file,audio_marking_timeline):
+       media_in = dir_in+file_in
+       file_length_sec = audio_length_sec(media_in)
+       audio_mark_length_sec = audio_length_sec(audio_marking_file)
+       ecasound_phrase = ''
+       audio_gain = str(100+100*len(audio_marking_timeline))
+
+       for timeline in audio_marking_timeline:
+               audio_marking_ecasound_filename = file_in+'_'+timeline+'.ewf'
+               audio_marking_ecasound_path = dir_in+file_in+'_'+timeline+'.ewf'
+               audio_marking_ecasound_file=open(audio_marking_ecasound_path,'w')
+               audio_marking_ecasound_file.write('-- '+audio_marking_ecasound_filename+' --\n')
+               audio_marking_ecasound_file.write('source = '+audio_marking_file+'\n')
+               if timeline == 'b':
+                       mark_offset = '0'
+                       ecasound_phrase = '-a:2 -i:"'+audio_marking_ecasound_path+'" -ea:'+audio_gain+' '
+               if timeline == 'm':
+                       mark_offset = str(file_length_sec/2)
+                       ecasound_phrase = ecasound_phrase+'-a:3 -i:"'+audio_marking_ecasound_path+'" -ea:'+audio_gain+' '
+               if timeline == 'e':
+                       mark_offset = str(file_length_sec-audio_mark_length_sec)
+                       ecasound_phrase = ecasound_phrase+'-a:4 -i:"'+audio_marking_ecasound_path+'" -ea:'+audio_gain+' '
+               audio_marking_ecasound_file.write('offset = '+mark_offset+'.0\n')
+               audio_marking_ecasound_file.write('start-position = 0.0\n')
+               audio_marking_ecasound_file.write('length = '+str(audio_mark_length_sec)+'.0\n')
+               audio_marking_ecasound_file.write('looping = false\n')
+               audio_marking_ecasound_file.write('--cut--\n')
+               audio_marking_ecasound_file.close()
+       os.system('ecasound -a:1 -i:"'+media_in+'" -ea:'+audio_gain+' '+ecasound_phrase+' -a:all -o "'+dir_in+'marked_'+file_in+'"')
+
diff --git a/old/audio_tools.py b/old/audio_tools.py
new file mode 100644 (file)
index 0000000..0c2ea7a
--- /dev/null
@@ -0,0 +1,180 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+import os, sys, re, string
+import tag_tools
+from audio_tools import *
+
+def encode(enc_type,dir_in,file_in,dir_out,file_out):
+       media_in = dir_in+file_in
+       media_out = dir_out+file_out
+
+       if enc_type == 'flac' :
+               quality = tag_tools.get_opt_value(enc_type+'_quality')
+               os.system('flac -f -V -q '+quality+' -o "'+media_out+'" "'+media_in+'"')
+
+       if enc_type == 'ogg':
+               bitrate = tag_tools.get_opt_value(enc_type+'_bitrate')
+               os.system('oggenc -b '+bitrate+' -o "'+media_out+'" "'+media_in+'"')
+
+       if enc_type == 'mp3':
+               bitrate = tag_tools.get_opt_value(enc_type+'_bitrate')
+               tag='temp'
+               os.system('lame -b '+tag+' --ta "'+tag+'" --tt "'+tag+'" --tl "'+tag+'" --ty '+tag+' --tg "Other" --tc "'+tag+'" "'+media_in+'" "'+media_out+'"')
+
+       if enc_type == 'wav':
+               if iswav16(media_in):
+                       os.system('cp -a "'+media_in+'" "'+media_out+'"')
+               else:
+                       os.system('sox "'+media_in+'" -w -r 44100 -t wav -c2 "'+media_out+'"')
+
+#      if enc_type == 'ogg' and ismp3(media_in):
+#                os.system('mp32ogg --verbose "'+file_in+'" "'+file_out+'"')
+
+def decode(media_in,file_ext):
+       if ismp3(media_in) or file_ext == 'mp3':
+               os.system('mpg123 -q -s "'+media_in+'" -w "'+media_in+'.wav"')
+       if isogg(media_in) or file_ext == 'ogg':
+               os.system('oggdec -o "'+media_in+'.wav" "'+media_in+'"')
+       if isflac(media_in) or file_ext == 'flac':
+               os.system('flac -d "'+media_in+'"')
+       if iswav(media_in) or file_ext == 'wav':
+               os.system('sox "'+media_in+'" -w -r 44100 -t wav -c2 "'+media_in+'.wav"')
+       if isaiff(media_in) or file_ext == 'aiff':
+               os.system('sox "'+media_in+'" -w -r 44100 -t aiff -c2 "'+media_in+'.wav"')
+
+def normalize(media_in):
+       os.system('normalize-audio "'+media_in+'"')
+
+def create_md5_key(dir_in,file_in):
+       media_in = dir_in+file_in
+       os.system('md5sum -b "'+media_in+'" "'+media_in+'.md5"')
+
+def check_md5_key(dir_in,file_in):
+       media_in = dir_in+file_in
+       md5_log = os.popen4('md5sum -c "'+media_in+'" "'+media_in+'.md5"')
+       if 'OK' in md5_log.split(':'):
+               return True
+       else:
+               return False
+
+def compare_md5_key(file_in,file_out):
+       media_in = file_in
+       media_out = file_out
+       if not os.path.exists(media_in):
+               return False
+       else:
+               print 'Checking md5sums...'
+               file_in_in, file_in_out = os.popen4('md5sum -b "'+media_in+'"')
+               file_out_in, file_out_out = os.popen4('md5sum -b "'+media_out+'"')
+               for line in file_in_out.readlines():
+                       line = line.split('*')
+                       line = line[0]
+                       #print line
+                       for file_out_out_line in file_out_out.readlines():
+                               file_out_out_line= file_out_out_line.split('*')
+                               file_out_out_line= file_out_out_line[0]
+                               #print file_out_out_line        
+                               if line == file_out_out_line:
+                                       print 'Files are equal...\n'
+                                       return True
+                                       exit
+                               else:
+                                       print 'Files are different...\n'
+                                       return False
+                                       exit
+               
+def create_par_key(dir_in,file_in):
+       media_in = dir_in+file_in
+       os.system('par2 c -n1 "'+media_in+'"')
+
+def recover_par_key(dir_in):
+       for file in os.listdir(dir_in):
+               media_in = dir_in+file
+               if iswav(media_in):
+                       os.system('par2 r "'+media_in+'"')
+
+def verify_par_key(media_in):
+       os.system('par2 v "'+media_in+'.par2"')
+
+def clean_directory(dir_in,type_list):
+       for enc_type in type_list:
+               if os.path.exists(dir_in+enc_type):
+                       print 'Removing '+dir_in+enc_type
+                       os.system('rm -rf "'+dir_in+enc_type+'"')
+
+def audio_length_sec(file) :
+       file_in, file_out = os.popen4('wavinfo "'+file+'" | grep wavDataSize')
+       for line in file_out.readlines():
+               line_split = line.split(':')
+               value = int(int(line_split[1])/(4*44100))
+               return value
+
+def ext_is_audio(file):
+       file_name_woext, file_ext = tag_tools.filename_split(file)
+       return file_ext == "mp3" or file_ext == "ogg" or file_ext == "flac" or file_ext == "wav" or file_ext == "aif" or file_ext == "aiff" or file_ext == "WAV" or file_ext == "AIFF" or file_ext == "AIF" or file_ext == "MP3" or file_ext == "OGG" or file_ext == "FLAC"
+
+def isaudio(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(' ')
+               return (iswav16(file) or iswav(file) or ismp3(file) or isogg(file) or isflac(file) or isaiff(file) or isaiff16(file))
+
+def iswav(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(' ')
+               return ('WAVE' in line_split)
+
+def iswav16(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(' ')
+               return ('WAVE' in line_split) and ('16' in line_split)
+
+def isaiff(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(' ')
+               return ('AIFF' in line_split)
+
+def isaiff16(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(' ')
+               return ('AIFF' in line_split) and ('16' in line_split)
+
+def ismp3(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split_space = line.split(' ')
+               line_split_comma = line.split(',')
+               return (('MPEG' in line_split_space and ' layer III' in line_split_comma) or 'MP3' in line_split_space)
+
+def isogg(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(',')
+               return (' Vorbis audio' in line_split)
+
+def isflac(file) :
+       file_in, file_out = os.popen4('file "'+file+'"')
+       for line in file_out.readlines():
+               line_split = line.split(' ')
+               return ('FLAC' in line_split)
diff --git a/old/collection.py b/old/collection.py
new file mode 100644 (file)
index 0000000..671de22
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+import os, string
+
+class Collection :
+
+       def __init__(self) :
+               self.collection_name = 'telemeta_default'
+               self.collection_dir = '/home/'+os.environ["USER"]+'/telemeta/'
+               self.user_dir = '/home/'+os.environ["USER"]+'/.telemeta/'
+               self.user_tag_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_tags.xml'
+               self.user_collection_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_collection.xml'
+               self.tag_table = 'ARTIST,TITLE,ALBUM,DATE,GENRE,SOURCE,ENCODER,COMMENT'
+               self.type_list = 'mp3,ogg,flac,wav,aiff'
+               self.net_backup_host = 'domain.com'
+               self.net_backup_dir = '/home/'+os.environ["USER"]+'/telemeta/'
+
+#option_table=['enc_types','flac_bitrate','ogg_bitrate','mp3_bitrate','audio_marking','auto_audio_marking','audio_marking_file','audio_marking_timeline']
+
+#questions = ['Output formats','flac_bitrate','ogg_bitrate','mp3_bitrate','Audio marking (y/n)','Auto audio marking (y/n)','Audio marking file path','Audio marking timeline (b)eginning, (m)iddle, (e)nd']
\ No newline at end of file
diff --git a/old/consts.py b/old/consts.py
new file mode 100644 (file)
index 0000000..250daed
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+import os, string
+
+class Collection :
+
+       def __init__(self) :
+               self.collection_name = 'telemeta_default'
+               self.collection_dir = '/home/'+os.environ["USER"]+'/telemeta_default/'
+               self.user_dir = '/home/'+os.environ["USER"]+'/.telemeta/'
+               self.default_tag_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_tags.xml'
+               self.default_collection_xml = '/home/'+os.environ["USER"]+'/.telemeta/default_collection.xml'
+               self.tag_table = 'ARTIST,TITLE,ALBUM,DATE,GENRE,SOURCE,ENCODER,COMMENT'
+               self.type_list = 'mp3,ogg,flac,wav,aiff'
+               self.net_backup_host = 'domain.com'
+               self.net_backup_dir = '/home/'+os.environ["USER"]+'/telemeta/'
+
+#option_table=['enc_types','flac_bitrate','ogg_bitrate','mp3_bitrate','audio_marking','auto_audio_marking','audio_marking_file','audio_marking_timeline']
+
+#questions = ['Output formats','flac_bitrate','ogg_bitrate','mp3_bitrate','Audio marking (y/n)','Auto audio marking (y/n)','Audio marking file path','Audio marking timeline (b)eginning, (m)iddle, (e)nd']
\ No newline at end of file
diff --git a/old/default_options.py b/old/default_options.py
new file mode 100644 (file)
index 0000000..065e97b
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+class Options :
+
+       def __init__(self) :
+               self.collection = 'Unknown'
+               self.enc_types = 'flac, ogg, mp3'
+               self.ogg_bitrate ='192'
+               self.mp3_bitrate = '192'
+               self.flac_quality = '5'
+               self.audio_marking = False
+               self.auto_audio_marking = True
+               self.audio_marking_file = '/path/to/file'
+               self.audio_marking_timeline = 'b, m, e'
+               self.par_key = True
+               self.normalize = False
diff --git a/old/default_tags.py b/old/default_tags.py
new file mode 100644 (file)
index 0000000..a03c620
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+class Tags :
+
+       def __init__(self) :
+               self.COLLECTION = 'Unknown'
+               self.ARTIST = 'Unknown'
+               self.TITLE = 'Unknown'
+               self.ALBUM = 'Unknown'
+               self.GENRE = 'Other'
+               self.DATE = '1900'
+               self.SOURCE = 'Here'
+               self.ENCODER = 'me@domain.com'
+               self.COMMENT = 'No comment'
+               self.ORIGINAL_MEDIA = '1/4" tape'
+
diff --git a/old/tag_tools.py b/old/tag_tools.py
new file mode 100644 (file)
index 0000000..a64af27
--- /dev/null
@@ -0,0 +1,309 @@
+#!/usr/bin/python
+# *coding: utf-8*
+#
+# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USAA
+
+import os, sys, re, string
+import default_tags
+import default_options
+import consts
+import typeToolBox
+import xml.dom.minidom
+import xml.dom.ext
+from audio_tools import *
+from mutagen.flac import FLAC
+from mutagen.oggvorbis import OggVorbis
+from mutagen.id3 import ID3, TIT2, TP1, TAL, TDA, TCO, COM
+
+# Default values are used at first
+tags = default_tags.Tags()
+options = default_options.Options()
+collection = consts.Collection()
+
+# Collection
+# ============
+
+def write_collection_consts(fic):
+       doc = xml.dom.minidom.Document()
+       root = doc.createElement('telemeta')
+       doc.appendChild(root)
+       for data in collection.__dict__.keys() :
+               value = collection.__dict__[data]
+               node = doc.createElement('data')
+               node.setAttribute('name', data)
+               node.setAttribute('value', str(value))
+               node.setAttribute('type', typeToolBox.getType(value))
+               root.appendChild(node)
+       file_object = open(fic, "w")
+       xml.dom.ext.PrettyPrint(doc, file_object)
+       file_object.close()
+
+def get_collection_consts(doc):
+       for data in doc.documentElement.getElementsByTagName('data') :
+               name = data.getAttribute('name')
+               value = typeToolBox.cast(data.getAttribute('value'), data.getAttribute('type'))
+               collection.__dict__[name] = value
+
+def ask_write_collection(name):
+       global collection
+       for data in collection.__dict__.keys() :
+               if data == 'collection_name' :
+                       def_value = name
+                       type_def_value = typeToolBox.getType(def_value)
+                       value = raw_input(data+' ? ['+str(def_value)+']: ')
+               elif data == 'default_collection_xml' :
+                       collection_xml = '/home/'+os.environ["USER"]+'/.telemeta/'+name+'.xml'
+                       type_def_collection = typeToolBox.getType(collection_xml)
+                       collection_tmp = typeToolBox.cast(collection_xml,type_def_collection)
+                       collection.__dict__[data] = collection_tmp
+                       value = collection.__dict__[data]
+               elif data == 'collection_dir' :
+                       collection_dir = '/home/'+os.environ["USER"]+'/'+name
+                       type_def_collection_dir = typeToolBox.getType(collection_dir)
+                       collection_tmp = typeToolBox.cast(collection_dir,type_def_collection_dir)
+                       collection.__dict__[data] = collection_tmp
+                       def_value = collection.__dict__[data]
+                       value = raw_input(data+' ? ['+str(def_value)+']: ')
+               elif data == 'user_dir' :
+                       def_value = '/home/'+os.environ["USER"]+'/.telemeta/'
+                       type_def_value = typeToolBox.getType(def_value)
+                       value = def_value
+               elif data == 'default_tag_xml' :
+                       def_value = '/home/'+os.environ["USER"]+'/.telemeta/default_tags.xml'
+                       type_def_value = typeToolBox.getType(def_value)
+                       value = def_value
+               else :
+                       def_value = collection.__dict__[data]
+                       type_def_value = typeToolBox.getType(def_value)
+                       value = raw_input(data+' ? ['+str(def_value)+']: ')
+               if not value == '' :
+                       value = typeToolBox.cast(value,type_def_value)
+                       #value = string.replace(in_float,' ','')
+                       collection.__dict__[data] = value
+
+def get_consts_value(data):
+       value = collection.__dict__[data]
+       type_value = typeToolBox.getType(value)
+       return value
+
+# TAGS
+# =====
+
+def write_tags(enc_type,dir_out,file_out):
+       media_out = dir_out+file_out
+
+       if enc_type == 'flac':
+               audio = FLAC(media_out)
+               for tag in tags.__dict__.keys():
+                       if tag == 'COMMENT':
+                               audio['DESCRIPTION'] = tags.__dict__[tag]
+                       else:
+                               audio[tag] = tags.__dict__[tag]
+               audio.save()
+
+       if enc_type == 'ogg':
+               audio = OggVorbis(media_out)
+               for tag in tags.__dict__.keys():
+                       audio[tag] = tags.__dict__[tag]
+               audio.save()
+
+       if enc_type == 'mp3':
+               audio = ID3(media_out)
+               #tags = ['ALBUM','DATE','GENRE','SOURCE','ENCODER','COMMENT']
+               tag = tags.__dict__['TITLE']
+               audio.add(TIT2(encoding=3, text=tag))
+               tag = tags.__dict__['ARTIST']
+               audio.add(TP1(encoding=3, text=tag))
+               tag = tags.__dict__['ALBUM']
+               audio.add(TAL(encoding=3, text=tag))
+               tag = tags.__dict__['DATE']
+               audio.add(TDA(encoding=3, text=tag))
+               tag = tags.__dict__['GENRE']
+               audio.add(TCO(encoding=3, text=tag))
+               tag = tags.__dict__['COMMENT']
+               audio.add(COM(encoding=3, text=tag))
+               audio.save()
+
+def write_def_tags(fic):
+       doc = xml.dom.minidom.Document()
+       root = doc.createElement('telemeta')
+       doc.appendChild(root)
+       for tag in tags.__dict__.keys() :
+               value = tags.__dict__[tag]
+               node = doc.createElement('tag')
+               node.setAttribute('name', tag)
+               node.setAttribute('value', str(value))
+               node.setAttribute('type', typeToolBox.getType(value))
+               root.appendChild(node)
+       for opt in options.__dict__.keys() :
+               value = options.__dict__[opt]
+               node = doc.createElement('opt')
+               node.setAttribute('name', opt)
+               node.setAttribute('value', str(value))
+               node.setAttribute('type', typeToolBox.getType(value))
+               root.appendChild(node)
+       file_object = open(fic, "w")
+       xml.dom.ext.PrettyPrint(doc, file_object)
+       file_object.close()
+
+def ask_write_tag():
+       global tags
+       global options
+       for tag in tags.__dict__.keys() :
+               def_value = tags.__dict__[tag]
+               type_def_value = typeToolBox.getType(def_value)
+               value = raw_input(tag+' ? ['+str(def_value)+']: ')
+               if not value == '' :
+                       value = typeToolBox.cast(value,type_def_value)
+                       #value = string.replace(in_float,' ','')
+                       tags.__dict__[tag] = value
+       for opt in options.__dict__.keys() :
+               def_value = options.__dict__[opt]
+               type_def_value = typeToolBox.getType(def_value)
+               value = raw_input(opt+' ? ['+str(def_value)+']: ')
+               if not value == '' :
+                       value = typeToolBox.cast(value,type_def_value)
+                       #value = string.replace(in_float,' ','')
+                       options.__dict__[opt] = value
+
+def get_def_tags(doc):
+       for tag in doc.documentElement.getElementsByTagName('tag') :
+               name = tag.getAttribute('name')
+               value = typeToolBox.cast(tag.getAttribute('value'), tag.getAttribute('type'))
+               tags.__dict__[name] = value
+       for opt in doc.documentElement.getElementsByTagName('opt') :
+               name = opt.getAttribute('name')
+               value = typeToolBox.cast(opt.getAttribute('value'), opt.getAttribute('type'))
+               options.__dict__[name] = value
+
+def rename_tag(old_tag,new_tag):
+       tag_list = tags.__dict__.keys()
+       if old_tag in tag_list:
+               tag_index = tag_list.index(old_tag)
+               tag_list.remove(old_tag)
+               tag_list.insert(tag_index,new_tag)
+
+def get_tag_value(tag):
+       value = tags.__dict__[tag]
+       type_value = typeToolBox.getType(value)
+       return value
+
+def get_opt_value(opt):
+       value = options.__dict__[opt]
+       type_value = typeToolBox.getType(value)
+       return value
+
+def add_tag(tag,value):
+       tag_list = tags.__dict__.keys()
+       tag_list.insert(0,tag)
+       tags.__dict__[tag] = value
+
+def add_opt(opt,value):
+       opt_list = options.__dict__.keys()
+       opt_list.insert(0,opt)
+       options.__dict__[opt] = value
+
+def rename_file(src_dir,file,file_name):
+       if (file_name != "" and file_name != file):
+               print "Renaming: %s -> %s\n" % (file,file_name)
+               os.rename(src_dir+file, src_dir+file_name)
+
+def filename_split(file_name):
+       filename_split = file_name.split('.')
+       if len(filename_split) > 0:
+               file_ext = filename_split[len(filename_split)-1]
+       else:
+               file_ext = ''
+       file_name_woext = '.'.join(filename_split[:-1])
+       return file_name_woext, file_ext
+
+#def check_ext():
+       #if not ext_is_audio(file):
+               #file_name_woext = file_name
+               #if iswav(src_dir+file) :
+                       #file_ext = "wav"
+               #if isaiff(src_dir+file) :
+                       #file_ext = "aiff"
+               #if ismp3(src_dir+file) :
+                       #file_ext = "mp3"
+               #if isogg(src_dir+file) :
+                       #file_ext = "ogg"
+               #if isflac(src_dir+file) :
+                       #file_ext = "flac"
+
+def clean_filename(file_name) :
+       file_name = re.sub("^[^\w]+","",filename) #trim the beginning
+       file_name = re.sub("[^\w]+$","",file_name) #trim the end
+       file_name = string.replace(file_name,' ','_')
+       file_name = re.sub("_+","_",file_name) #squeeze continuous _ to one _
+       file_name = re.sub("^[^\w]+","",file_name) #trim the beginning _
+       #file_name = string.capitalize(file_name)
+       return file_name
+
+def name2tag(src_dir,file_name_woext,file_ext):
+       # get main tag
+       tag_list = file_name_woext.split('-')
+       tag_list_new = range(len(tag_list))
+
+       #for num_t in tag_list[0]:
+       #       if num_t == str(int(num_t)):
+       #               i_t = 1
+       #       else:
+
+       # computing main tags if many tags
+       if len(tag_list) > 1 :
+               i_t = 0
+               artist_tmp = string.replace(tag_list[i_t],' ','_')
+               artist_tmp = artist_tmp.split('_')
+               i = 0
+               for artist_word in artist_tmp :
+                       artist_tmp[i] = string.capitalize(artist_word)
+                       i = i+1
+               artist = '_'.join(artist_tmp[:])
+               artist = re.sub("[\_]+$","",artist) #trim the end
+               tag_list_new[i_t] = artist
+               artist = string.replace(artist,'_',' ')
+
+               i_t = i_t + 1
+               title = string.replace(tag_list[i_t],' ','_')
+               title = re.sub("^[\_]+","",title) #trim the beginning
+               title = re.sub("[\_]+$","",title) #trim the end
+               title_tmp = title.split('_')
+               title_tmp[0] = string.capitalize(title_tmp[0])
+               title = '_'.join(title_tmp[:])
+               tag_list_new[i_t] = title
+               title = string.replace(title,'_',' ')
+
+       # computing main tag if only one tag
+       if len(tag_list) == 1 :
+               artist = get_tag_value('ARTIST')
+               i_t = 0
+               title = string.replace(tag_list[i_t],' ','_')
+               title = re.sub("^[\_]+","",title) #trim the beginning
+               title = re.sub("[\_]+$","",title) #trim the end
+               title_tmp = title.split('_')
+               title_tmp[0] = string.capitalize(title_tmp[0])
+               title = '_'.join(title_tmp[:])
+               tag_list_new[i_t] = title
+               title = string.replace(title,'_',' ')
+
+       file_name_new = '-'.join(tag_list_new[:])
+
+       # renaming main source file
+       file_name = file_name_new+'.'+file_ext
+
+       return title,artist,file_name_new
diff --git a/old/telemeta.py b/old/telemeta.py
new file mode 100644 (file)
index 0000000..0d50762
--- /dev/null
@@ -0,0 +1,461 @@
+#!/usr/bin/python
+# *-* coding: utf-8 *-*
+"""
+   telemeta
+
+   Copyright (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>
+
+   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., 675 Mass Ave, Cambridge, MA 02139, USA.
+"""
+
+# Version
+# =======
+version = '0.2.7'
+
+# Modules and error routines
+# ==========================
+import os, sys, re, string, shutil
+import xml.dom.minidom
+import xml.dom.ext
+import consts
+import audio_marking
+import tag_tools
+import audio_tools
+import default_tags
+import default_options
+import typeToolBox
+from audio_tools import *
+
+
+# Info, error
+# ===========
+if len(sys.argv) == 1 :
+       print "telemeta v"+str(version)+" (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>>"
+       print "version: "+str(version)
+       print "depends: python, python-xml, python-mutagen, sox, oggenc, flac, lame, normalize-audio, ecasound, wavbreaker, festival"
+       print "distributed under the terms of the GNU Public License v2.\n"
+       print """   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.\n"""
+       sys.exit('Type telemeta --help for help !\n')
+
+elif sys.argv[1] == '--help':
+       print "TELEMETA:"
+       print "         backups, transcodes, tags and marks any audio content with metadata\n"
+       print "VERSION:"
+       print "         "+str(version)+'\n'
+       print "DEPENDS:"
+       print "         python, python-xml, python-mutagen, sox, oggenc, flac, lame, normalize-audio, ecasound, wavbreaker, festival\n"
+       print "COPYRIGHT:"
+       print "         Copyright (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>\n"
+       print "LICENSE:"
+       print "         distributed under the terms of the GNU Public License v2.\n"
+       print "USAGE:"
+       print "         telemeta [OPTIONS] COLLECTION [OPTIONS] [MEDIA] \n"
+       print "COLLECTION:"
+       print "         - the name of collection you want to create"
+       print "         - the name of collection you want to backup or process into\n"
+       print "MEDIA:"
+       print "         - an audio file"
+       print "         - a directory when the --album option is given\n"
+       print "OPTIONS:"
+       print "         --create       creates a collection repository"
+       print "         --backup       backups and transcodes wave files to a collection"
+       print "         --album        proccesses an entire directory (one shot album)"
+       print "         --from-xml     takes tags and opts in original xml source"
+       print "         --force        forces file conversion"
+       print "         --add-tag      add a tag to a collection"
+       print '         --par2         forces security "par2" key creation'
+       print "         --all-default  chooses default argument for all question"
+       print '         --recover      check an repair the backuped media with the previously created "par2" security key'
+       print "         --rsync        synchronizes a collection with a remote server repository (ssh+rsync)"
+       print "         --erase        erases a collection (flac, ogg, mp3 only !)"
+       print "         --version      gives the program version"
+       print "         --help         gives help page\n"
+       print "EXAMPLES:"       
+       print "         telemeta --create my_collection"
+       print "         telemeta --backup my_collection file.wav"
+       print "         telemeta --backup my_collection --album /path/to/directory/"
+       print "         telemeta --backup my_collection --album --par2 --rsync /path/to/directory/"
+       print "         telemeta --backup my_collection --album --par2 --rsync --force /path/to/directory/\n"
+       print "AUTHOR:"
+       print "         Guillaume Pellerin <yomguy@altern.org>\n"
+       print "URL:"
+       print "         http://svn.parisson.org/telemeta\n"
+       print 'IMPORTANT:'
+       print "         With the '--album' option, it supposed that all your wav files in the directory are named respectively to this scheme :"
+       print "            artist-title[-album-date-genre-description][.wav]"
+       print "         where the 'artist' and 'title' tags are necessary needed."
+       print "         Tags between [] are optional main tags.\n"
+       print "FOR MORE INFORMATIONS :"
+       print "         - read the README file"
+       print "         - go to http://svn.parisson.org/telemeta"
+       sys.exit('         - email me !\n')
+
+elif sys.argv[1] == '--version':
+       sys.exit('Version: '+str(version))
+
+else :
+       print "telemeta v"+str(version)+" (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>"
+       print """   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.\n"""
+
+
+# Initialisation
+# ===============
+
+argv = sys.argv
+len_argv = len(argv)
+
+# Get collection consts
+collection = consts.Collection()
+
+# Get arguments
+if '--recover' in argv :
+       index = argv.index('--recover')
+       audio_tools.recover_par_key(argv[index+1]+os.sep)
+       sys.exit('Directory successfully recovered !')
+
+if '--erase' in argv :
+       type_list = tag_tools.get_consts_value('type_list')
+       type_list = type_list.split(',')
+       index = argv.index('--erase')
+       audio_tools.clean_directory(argv[index+1],type_list)
+       sys.exit('Media directories successfully cleaned !')
+
+if '--force' in argv :
+       print 'Warning: forcing file transfert and conversion (no audio test) !\n'
+       mode_force = True
+else :
+       mode_force = False
+
+if '--album' in argv :
+       print 'Warning: album (recusive) mode...\n'
+       mode_album = True
+else :
+       mode_album = False
+
+if '--backup' in argv :
+       print 'Warning: backup mode...\n'
+       mode_backup = True
+else :
+       mode_backup = False
+
+if '--tags' in argv :
+       print 'Warning: making tags...\n'
+       mode_tags = True
+else :
+       mode_tags = False
+
+if '--add-tag' in argv :
+       print 'Warning: adding tags...\n'
+       mode_add_tag = True
+else :
+       mode_add_tag = False
+
+if '--from-xml' in argv :
+       print 'Warning: processing from XML...\n'
+       mode_from_xml = True
+else :
+       mode_from_xml = False
+
+if '--clean-strings' in argv :
+       print 'Warning: Cleaning strings...\n'
+       mode_clean = True
+else :
+       mode_clean = False
+
+if '--all-default' in argv :
+       print 'Warning: default mode enabled...\n'
+       mode_default = True
+else :
+       mode_default = False
+
+if '--par2' in argv :
+       print 'Warning: creates par2 security keys...\n'
+       mode_par2 = True
+else :
+       mode_par2 = False
+
+if '--rsync' in argv :
+       print 'Warning: synchronize with remote host...\n'
+       mode_rsync = True
+else :
+       mode_rsync = False
+
+if '--create' in argv :
+       print 'Warning: creating a telemeta collection...\n'
+       mode_create = True
+else :
+       mode_create = False
+
+# Creates user default dir
+user_dir = tag_tools.get_consts_value('user_dir')
+if not os.path.exists(user_dir):
+       os.mkdir(user_dir)
+
+# Create or check the databse config
+default_collection_xml = tag_tools.get_consts_value('default_collection_xml')
+if not os.access(default_collection_xml, os.F_OK) :
+       tag_tools.write_collection_consts(default_collection_xml)
+
+# Create the collection
+if mode_create :
+       if len(argv) == 3 :
+               index = argv.index('--create')
+               collection_name = argv[index+1]
+               tag_tools.ask_write_collection(collection_name)
+               default_collection_xml = tag_tools.get_consts_value('default_collection_xml')
+               collection_dir = tag_tools.get_consts_value('collection_dir')
+               if not os.path.exists(collection_dir):
+                       os.mkdir(collection_dir)
+               else :
+                               sys.exit('ERROR: the collection '+collection_name+' already exists')
+               tag_tools.write_collection_consts(default_collection_xml)
+               tag_tools.write_collection_consts(collection_dir+os.sep+collection_name+'.xml')
+               # Parses collection data
+               sys.exit("\nCollection created ! You can now --backup media in it...")
+       else :
+               sys.exit("ERROR: no collection name given... : give a name for your collection.")
+# Backup into the collection
+elif mode_backup :
+       # Check syntax
+       if not os.path.exists(sys.argv[len(sys.argv)-1]) :
+               sys.exit("ERROR: no such media... : give a directory or a file as last argument.")
+       index = argv.index('--backup')
+       collection_name = argv[index+1]
+       collection_xml = user_dir+os.sep+collection_name+'.xml'
+       if not os.path.exists(collection_xml) :
+               sys.exit("This collection doesn't exists. Create it first ! (--create)")
+       else :
+               doc = xml.dom.minidom.parse(user_dir+os.sep+collection_name+'.xml')
+               print "Parsing collection XML file..."
+               tag_tools.get_collection_consts(doc)
+               collection_dir = tag_tools.get_consts_value('collection_dir')
+               print "OK\n"
+       
+
+# Creates source dir
+src_dir = collection_dir+os.sep+'src'+os.sep
+if not os.path.exists(src_dir) :
+        os.mkdir(src_dir)
+
+# Creates user default tag/opt file and parse it
+default_tag_xml = tag_tools.get_consts_value('default_tag_xml')
+if not os.access(default_tag_xml, os.F_OK) :
+       tag_tools.write_def_tags(default_tag_xml)
+
+# Parses tag data
+doc = xml.dom.minidom.parse(default_tag_xml)
+tag_tools.get_def_tags(doc)
+
+# Initializes master file list
+file_master_list = range(1)
+
+# File listing for album mode
+if mode_album :
+       master_dir = argv[len_argv-1]+os.sep
+       if os.path.isdir(master_dir):
+               file_master_list = os.listdir(master_dir)
+       else:
+               sys.exit('Please give a directory path for the last argument (album mode)...')
+# File listing in normal mode
+else :
+       master_dir = argv[len_argv-1]
+       if os.path.isdir(master_dir):
+               file_master_list = os.listdir(master_dir)
+       elif os.path.isfile(master_dir):
+               master_dir = os.getcwd()+os.sep
+               file_master_list[0] = str(argv[len_argv-1])
+       else:
+               sys.exit('Please give a directory or a file path for the last argument...')
+
+# Asks tags if mode album
+if mode_album and not mode_from_xml :
+       tag_tools.ask_write_tag()
+       tag_tools.write_def_tags(default_tag_xml)
+
+
+# Main loop
+# =========
+
+for file in file_master_list :
+       if isaudio(master_dir+os.sep+file) or (mode_force and ext_is_audio(master_dir+os.sep+file)):
+               print '\n'
+               print '+------------------------------------------------------------------------------------'
+               print '| Processing '+master_dir+file
+               print '+------------------------------------------------------------------------------------'
+
+               # Init
+               file_name = file
+               file_in = file
+               dir_in = src_dir
+
+               # Backup mode
+               if mode_backup :
+                       album_dir_tmp = tag_tools.get_tag_value('ALBUM')
+                       album_dir = collection_dir+os.sep+'src'+os.sep+album_dir_tmp+os.sep
+                       if not os.path.exists(album_dir) :
+                               os.mkdir(album_dir)
+                       if isaudio(master_dir+file) and ( not audio_tools.compare_md5_key(master_dir+file,album_dir+file) or mode_force ) :
+                               print 'Copying files into: '+album_dir+''
+                               os.system('cp -ra "'+master_dir+file+'" '+album_dir)
+                               print 'OK\n'
+                       #else:
+                       #       sys.exit(master_dir+file+' is not an audio file...')
+                       src_dir = album_dir
+                       dir_in = src_dir
+               else :
+                       dir_in = master_dir
+
+               # Creating par2 key
+               par_key_value = tag_tools.get_opt_value('par_key')
+               if mode_par2 and par_key_value :
+                       # Creating "par2" security keys
+                       print 'Creating "par2" security keys...'
+                       audio_tools.create_par_key(dir_in,file)
+
+               # Name, extension
+               file_name_woext, file_ext = tag_tools.filename_split(file)
+               tag_tools.add_tag('ORIGINAL_FILENAME',file)
+               tag_tools.add_tag('ORIGINAL_TYPE',file_ext)
+
+               # Get original XML
+               if mode_from_xml :
+                       doc = xml.dom.minidom.parse(dir_in+file_name+'.xml')
+                       tag_tools.get_def_tags(doc)
+
+               # Album mode
+               if mode_album :
+                       # Getting file main tags
+                       title,artist,file_name_new = tag_tools.name2tag(dir_in,file_name_woext,file_ext)
+                       tag_tools.add_tag('ARTIST',artist)
+                       tag_tools.add_tag('TITLE',title)
+                       print "Artist: "+artist
+                       print "Title: "+title+'\n'
+                       #tag_tools.write_def_tags(default_tag_xml)
+
+               # Asks for new metadata and write default user tags/options
+               if not mode_default and not mode_from_xml and not mode_album:
+                       tag_tools.ask_write_tag()
+               tag_tools.write_def_tags(default_tag_xml)
+
+
+
+               # Clean mode
+               if mode_clean :
+                       file_name = tag_tools.clean_filename(file_name)
+                       # Renaming backup source file
+                       tag_tools.rename_file(dir_in,dir_out,file,file_name)
+
+               # Writing xml data
+               if not mode_from_xml :
+                       print 'Writing xml data...'
+                       tag_tools.write_def_tags(dir_in+file_name+'.xml')
+
+               # Getting encoding types
+               enc_types = tag_tools.get_opt_value('enc_types')
+               enc_types = string.replace(enc_types,' ','').split(',')
+
+               # Checking existing file
+               for enc_type in enc_types:
+                       dir_out = master_dir+enc_type+os.sep
+                       file_out = file_name_woext+'.'+enc_type
+                       if not os.path.exists(dir_out+file_out):
+                               new_track = True
+                       else :
+                               new_track = False
+
+               # Decoding to a new 16 bits wav file if needed
+               if not iswav16(dir_in+file_in) and new_track:
+                       print "Decoding to wav 16 bits..."
+                       audio_tools.decode(dir_in+file_in,file_ext)
+                       # Important !
+                       type_list = tag_tools.get_consts_value('type_list')
+                       type_list = type_list.split(',')
+                       if not file_ext in type_list :
+                               file_in=file_in+'.wav'
+
+               # Normalize file if needed
+               normalize_value = tag_tools.get_opt_value('normalize')
+               if normalize_value:
+                       print 'Normalizing...'
+                       audio_tools.normalize(dir_in+file_in)
+
+               # Marking
+               audio_marking_value = tag_tools.get_opt_value('audio_marking')
+               auto_audio_marking = tag_tools.get_opt_value('auto_audio_marking')
+               audio_marking_file = tag_tools.get_opt_value('audio_marking_file')
+               audio_marking_timeline = tag_tools.get_opt_value('audio_marking_timeline')
+               audio_marking_timeline = string.replace(audio_marking_timeline,' ','').split(',')
+               if audio_marking_value and new_track:
+                       if auto_audio_marking:
+                               print 'Creating track audio mark...'
+                               audio_marking.make_auto_mark(dir_in,file_in)
+                               audio_marking_file = dir_in+file_in+'_mark.wav'
+                       print 'Marking '+file_in+' with '+audio_marking_file+'...'
+                       audio_marking.mark_audio(dir_in,file_in,audio_marking_file,audio_marking_timeline)
+                       file_in = 'marked_'+file_in
+
+               # Encoding loop
+               for enc_type in enc_types:
+                       dir_out = collection_dir+os.sep+enc_type+os.sep
+                       if not os.path.exists(dir_out):
+                               os.mkdir(dir_out)
+                       album = tag_tools.get_tag_value('ALBUM')
+                       dir_out = collection_dir+os.sep+enc_type+os.sep+album+os.sep
+                       if not os.path.exists(dir_out):
+                               os.mkdir(dir_out)
+                       file_out = file_name_woext+'.'+enc_type
+
+                       if not os.path.exists(dir_out+file_out) or mode_force :
+                               print 'Converting '+dir_in+file_name+' to '+enc_type+'...'
+                               # Encoding
+                               print 'Encoding file...'
+                               audio_tools.encode(enc_type,dir_in,file_in,dir_out,file_out)
+                               print 'Writing tags to encoded file...'
+                               tag_tools.write_tags(enc_type,dir_out,file_out)
+
+                       else :
+                               print dir_out+file_out+' already exists !'
+                               if mode_tags :
+                                       print 'But writing tags to encoded file...'
+                                       tag_tools.write_tags(enc_type,dir_out,file_out)
+
+               # Remove tmp files
+               file_list = os.listdir(src_dir)
+               for file in file_list:
+                       if 'marked_' in file or '.ewf' in file or '_mark.wav' in file or file_ext+'.wav' in file:
+                               os.system('rm "'+dir_in+file+'"')
+
+       else :
+               print file+" is not an audio file !"
+
+# Sync to the remote server
+if mode_rsync :
+       net_backup_host = tag_tools.get_consts_value('net_backup_host')
+       net_backup_dir = tag_tools.get_consts_value('net_backup_dir')
+       print '+------------------------------------------------------------------------------------'
+       print '| Synchronizing with '+net_backup_host
+       print '+------------------------------------------------------------------------------------'
+       os.system('rsync -avzLp --delete --rsh="ssh -l '+os.environ["USER"]+'" '+collection_dir+' '+os.environ["USER"]+'@'+net_backup_host+':'+net_backup_dir)
+       print "Collection Synchronized !"
+
+
+# End
+# ===
diff --git a/old/typeToolBox.py b/old/typeToolBox.py
new file mode 100644 (file)
index 0000000..a6f2cb2
--- /dev/null
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#
+# Author: Ingelrest François (Athropos@gmail.com)
+#
+# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+# Supported types
+# 'bool' type must be placed *before* 'int' type, otherwise booleans are detected as integers
+types = {bool : 'bool', int : 'int', str : 'str'}
+
+# Return a String with the type of value
+def getType(value) :
+    for type in types.keys() :
+        if isinstance(value, type) :
+            return types[type]
+    raise TypeError, str(value) + ' has an unsupported type'
+
+# Return value, casted into type
+def cast(value, type) :
+    if type == 'bool' :
+        if value == 'True' :
+            return True
+        return False
+    elif type == 'int' :
+        return int(value)
+    elif type == 'str' :
+        return str(value)
+    raise TypeError, type + ' is an unsupported type'
diff --git a/tag_tools.py b/tag_tools.py
deleted file mode 100755 (executable)
index a64af27..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-#!/usr/bin/python
-# *coding: utf-8*
-#
-# Copyright (c) 2006-2007 Guillaume Pellerin <pellerin@parisson.com>
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USAA
-
-import os, sys, re, string
-import default_tags
-import default_options
-import consts
-import typeToolBox
-import xml.dom.minidom
-import xml.dom.ext
-from audio_tools import *
-from mutagen.flac import FLAC
-from mutagen.oggvorbis import OggVorbis
-from mutagen.id3 import ID3, TIT2, TP1, TAL, TDA, TCO, COM
-
-# Default values are used at first
-tags = default_tags.Tags()
-options = default_options.Options()
-collection = consts.Collection()
-
-# Collection
-# ============
-
-def write_collection_consts(fic):
-       doc = xml.dom.minidom.Document()
-       root = doc.createElement('telemeta')
-       doc.appendChild(root)
-       for data in collection.__dict__.keys() :
-               value = collection.__dict__[data]
-               node = doc.createElement('data')
-               node.setAttribute('name', data)
-               node.setAttribute('value', str(value))
-               node.setAttribute('type', typeToolBox.getType(value))
-               root.appendChild(node)
-       file_object = open(fic, "w")
-       xml.dom.ext.PrettyPrint(doc, file_object)
-       file_object.close()
-
-def get_collection_consts(doc):
-       for data in doc.documentElement.getElementsByTagName('data') :
-               name = data.getAttribute('name')
-               value = typeToolBox.cast(data.getAttribute('value'), data.getAttribute('type'))
-               collection.__dict__[name] = value
-
-def ask_write_collection(name):
-       global collection
-       for data in collection.__dict__.keys() :
-               if data == 'collection_name' :
-                       def_value = name
-                       type_def_value = typeToolBox.getType(def_value)
-                       value = raw_input(data+' ? ['+str(def_value)+']: ')
-               elif data == 'default_collection_xml' :
-                       collection_xml = '/home/'+os.environ["USER"]+'/.telemeta/'+name+'.xml'
-                       type_def_collection = typeToolBox.getType(collection_xml)
-                       collection_tmp = typeToolBox.cast(collection_xml,type_def_collection)
-                       collection.__dict__[data] = collection_tmp
-                       value = collection.__dict__[data]
-               elif data == 'collection_dir' :
-                       collection_dir = '/home/'+os.environ["USER"]+'/'+name
-                       type_def_collection_dir = typeToolBox.getType(collection_dir)
-                       collection_tmp = typeToolBox.cast(collection_dir,type_def_collection_dir)
-                       collection.__dict__[data] = collection_tmp
-                       def_value = collection.__dict__[data]
-                       value = raw_input(data+' ? ['+str(def_value)+']: ')
-               elif data == 'user_dir' :
-                       def_value = '/home/'+os.environ["USER"]+'/.telemeta/'
-                       type_def_value = typeToolBox.getType(def_value)
-                       value = def_value
-               elif data == 'default_tag_xml' :
-                       def_value = '/home/'+os.environ["USER"]+'/.telemeta/default_tags.xml'
-                       type_def_value = typeToolBox.getType(def_value)
-                       value = def_value
-               else :
-                       def_value = collection.__dict__[data]
-                       type_def_value = typeToolBox.getType(def_value)
-                       value = raw_input(data+' ? ['+str(def_value)+']: ')
-               if not value == '' :
-                       value = typeToolBox.cast(value,type_def_value)
-                       #value = string.replace(in_float,' ','')
-                       collection.__dict__[data] = value
-
-def get_consts_value(data):
-       value = collection.__dict__[data]
-       type_value = typeToolBox.getType(value)
-       return value
-
-# TAGS
-# =====
-
-def write_tags(enc_type,dir_out,file_out):
-       media_out = dir_out+file_out
-
-       if enc_type == 'flac':
-               audio = FLAC(media_out)
-               for tag in tags.__dict__.keys():
-                       if tag == 'COMMENT':
-                               audio['DESCRIPTION'] = tags.__dict__[tag]
-                       else:
-                               audio[tag] = tags.__dict__[tag]
-               audio.save()
-
-       if enc_type == 'ogg':
-               audio = OggVorbis(media_out)
-               for tag in tags.__dict__.keys():
-                       audio[tag] = tags.__dict__[tag]
-               audio.save()
-
-       if enc_type == 'mp3':
-               audio = ID3(media_out)
-               #tags = ['ALBUM','DATE','GENRE','SOURCE','ENCODER','COMMENT']
-               tag = tags.__dict__['TITLE']
-               audio.add(TIT2(encoding=3, text=tag))
-               tag = tags.__dict__['ARTIST']
-               audio.add(TP1(encoding=3, text=tag))
-               tag = tags.__dict__['ALBUM']
-               audio.add(TAL(encoding=3, text=tag))
-               tag = tags.__dict__['DATE']
-               audio.add(TDA(encoding=3, text=tag))
-               tag = tags.__dict__['GENRE']
-               audio.add(TCO(encoding=3, text=tag))
-               tag = tags.__dict__['COMMENT']
-               audio.add(COM(encoding=3, text=tag))
-               audio.save()
-
-def write_def_tags(fic):
-       doc = xml.dom.minidom.Document()
-       root = doc.createElement('telemeta')
-       doc.appendChild(root)
-       for tag in tags.__dict__.keys() :
-               value = tags.__dict__[tag]
-               node = doc.createElement('tag')
-               node.setAttribute('name', tag)
-               node.setAttribute('value', str(value))
-               node.setAttribute('type', typeToolBox.getType(value))
-               root.appendChild(node)
-       for opt in options.__dict__.keys() :
-               value = options.__dict__[opt]
-               node = doc.createElement('opt')
-               node.setAttribute('name', opt)
-               node.setAttribute('value', str(value))
-               node.setAttribute('type', typeToolBox.getType(value))
-               root.appendChild(node)
-       file_object = open(fic, "w")
-       xml.dom.ext.PrettyPrint(doc, file_object)
-       file_object.close()
-
-def ask_write_tag():
-       global tags
-       global options
-       for tag in tags.__dict__.keys() :
-               def_value = tags.__dict__[tag]
-               type_def_value = typeToolBox.getType(def_value)
-               value = raw_input(tag+' ? ['+str(def_value)+']: ')
-               if not value == '' :
-                       value = typeToolBox.cast(value,type_def_value)
-                       #value = string.replace(in_float,' ','')
-                       tags.__dict__[tag] = value
-       for opt in options.__dict__.keys() :
-               def_value = options.__dict__[opt]
-               type_def_value = typeToolBox.getType(def_value)
-               value = raw_input(opt+' ? ['+str(def_value)+']: ')
-               if not value == '' :
-                       value = typeToolBox.cast(value,type_def_value)
-                       #value = string.replace(in_float,' ','')
-                       options.__dict__[opt] = value
-
-def get_def_tags(doc):
-       for tag in doc.documentElement.getElementsByTagName('tag') :
-               name = tag.getAttribute('name')
-               value = typeToolBox.cast(tag.getAttribute('value'), tag.getAttribute('type'))
-               tags.__dict__[name] = value
-       for opt in doc.documentElement.getElementsByTagName('opt') :
-               name = opt.getAttribute('name')
-               value = typeToolBox.cast(opt.getAttribute('value'), opt.getAttribute('type'))
-               options.__dict__[name] = value
-
-def rename_tag(old_tag,new_tag):
-       tag_list = tags.__dict__.keys()
-       if old_tag in tag_list:
-               tag_index = tag_list.index(old_tag)
-               tag_list.remove(old_tag)
-               tag_list.insert(tag_index,new_tag)
-
-def get_tag_value(tag):
-       value = tags.__dict__[tag]
-       type_value = typeToolBox.getType(value)
-       return value
-
-def get_opt_value(opt):
-       value = options.__dict__[opt]
-       type_value = typeToolBox.getType(value)
-       return value
-
-def add_tag(tag,value):
-       tag_list = tags.__dict__.keys()
-       tag_list.insert(0,tag)
-       tags.__dict__[tag] = value
-
-def add_opt(opt,value):
-       opt_list = options.__dict__.keys()
-       opt_list.insert(0,opt)
-       options.__dict__[opt] = value
-
-def rename_file(src_dir,file,file_name):
-       if (file_name != "" and file_name != file):
-               print "Renaming: %s -> %s\n" % (file,file_name)
-               os.rename(src_dir+file, src_dir+file_name)
-
-def filename_split(file_name):
-       filename_split = file_name.split('.')
-       if len(filename_split) > 0:
-               file_ext = filename_split[len(filename_split)-1]
-       else:
-               file_ext = ''
-       file_name_woext = '.'.join(filename_split[:-1])
-       return file_name_woext, file_ext
-
-#def check_ext():
-       #if not ext_is_audio(file):
-               #file_name_woext = file_name
-               #if iswav(src_dir+file) :
-                       #file_ext = "wav"
-               #if isaiff(src_dir+file) :
-                       #file_ext = "aiff"
-               #if ismp3(src_dir+file) :
-                       #file_ext = "mp3"
-               #if isogg(src_dir+file) :
-                       #file_ext = "ogg"
-               #if isflac(src_dir+file) :
-                       #file_ext = "flac"
-
-def clean_filename(file_name) :
-       file_name = re.sub("^[^\w]+","",filename) #trim the beginning
-       file_name = re.sub("[^\w]+$","",file_name) #trim the end
-       file_name = string.replace(file_name,' ','_')
-       file_name = re.sub("_+","_",file_name) #squeeze continuous _ to one _
-       file_name = re.sub("^[^\w]+","",file_name) #trim the beginning _
-       #file_name = string.capitalize(file_name)
-       return file_name
-
-def name2tag(src_dir,file_name_woext,file_ext):
-       # get main tag
-       tag_list = file_name_woext.split('-')
-       tag_list_new = range(len(tag_list))
-
-       #for num_t in tag_list[0]:
-       #       if num_t == str(int(num_t)):
-       #               i_t = 1
-       #       else:
-
-       # computing main tags if many tags
-       if len(tag_list) > 1 :
-               i_t = 0
-               artist_tmp = string.replace(tag_list[i_t],' ','_')
-               artist_tmp = artist_tmp.split('_')
-               i = 0
-               for artist_word in artist_tmp :
-                       artist_tmp[i] = string.capitalize(artist_word)
-                       i = i+1
-               artist = '_'.join(artist_tmp[:])
-               artist = re.sub("[\_]+$","",artist) #trim the end
-               tag_list_new[i_t] = artist
-               artist = string.replace(artist,'_',' ')
-
-               i_t = i_t + 1
-               title = string.replace(tag_list[i_t],' ','_')
-               title = re.sub("^[\_]+","",title) #trim the beginning
-               title = re.sub("[\_]+$","",title) #trim the end
-               title_tmp = title.split('_')
-               title_tmp[0] = string.capitalize(title_tmp[0])
-               title = '_'.join(title_tmp[:])
-               tag_list_new[i_t] = title
-               title = string.replace(title,'_',' ')
-
-       # computing main tag if only one tag
-       if len(tag_list) == 1 :
-               artist = get_tag_value('ARTIST')
-               i_t = 0
-               title = string.replace(tag_list[i_t],' ','_')
-               title = re.sub("^[\_]+","",title) #trim the beginning
-               title = re.sub("[\_]+$","",title) #trim the end
-               title_tmp = title.split('_')
-               title_tmp[0] = string.capitalize(title_tmp[0])
-               title = '_'.join(title_tmp[:])
-               tag_list_new[i_t] = title
-               title = string.replace(title,'_',' ')
-
-       file_name_new = '-'.join(tag_list_new[:])
-
-       # renaming main source file
-       file_name = file_name_new+'.'+file_ext
-
-       return title,artist,file_name_new
diff --git a/telemeta.py b/telemeta.py
deleted file mode 100755 (executable)
index 0d50762..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-#!/usr/bin/python
-# *-* coding: utf-8 *-*
-"""
-   telemeta
-
-   Copyright (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>
-
-   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., 675 Mass Ave, Cambridge, MA 02139, USA.
-"""
-
-# Version
-# =======
-version = '0.2.7'
-
-# Modules and error routines
-# ==========================
-import os, sys, re, string, shutil
-import xml.dom.minidom
-import xml.dom.ext
-import consts
-import audio_marking
-import tag_tools
-import audio_tools
-import default_tags
-import default_options
-import typeToolBox
-from audio_tools import *
-
-
-# Info, error
-# ===========
-if len(sys.argv) == 1 :
-       print "telemeta v"+str(version)+" (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>>"
-       print "version: "+str(version)
-       print "depends: python, python-xml, python-mutagen, sox, oggenc, flac, lame, normalize-audio, ecasound, wavbreaker, festival"
-       print "distributed under the terms of the GNU Public License v2.\n"
-       print """   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.\n"""
-       sys.exit('Type telemeta --help for help !\n')
-
-elif sys.argv[1] == '--help':
-       print "TELEMETA:"
-       print "         backups, transcodes, tags and marks any audio content with metadata\n"
-       print "VERSION:"
-       print "         "+str(version)+'\n'
-       print "DEPENDS:"
-       print "         python, python-xml, python-mutagen, sox, oggenc, flac, lame, normalize-audio, ecasound, wavbreaker, festival\n"
-       print "COPYRIGHT:"
-       print "         Copyright (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>\n"
-       print "LICENSE:"
-       print "         distributed under the terms of the GNU Public License v2.\n"
-       print "USAGE:"
-       print "         telemeta [OPTIONS] COLLECTION [OPTIONS] [MEDIA] \n"
-       print "COLLECTION:"
-       print "         - the name of collection you want to create"
-       print "         - the name of collection you want to backup or process into\n"
-       print "MEDIA:"
-       print "         - an audio file"
-       print "         - a directory when the --album option is given\n"
-       print "OPTIONS:"
-       print "         --create       creates a collection repository"
-       print "         --backup       backups and transcodes wave files to a collection"
-       print "         --album        proccesses an entire directory (one shot album)"
-       print "         --from-xml     takes tags and opts in original xml source"
-       print "         --force        forces file conversion"
-       print "         --add-tag      add a tag to a collection"
-       print '         --par2         forces security "par2" key creation'
-       print "         --all-default  chooses default argument for all question"
-       print '         --recover      check an repair the backuped media with the previously created "par2" security key'
-       print "         --rsync        synchronizes a collection with a remote server repository (ssh+rsync)"
-       print "         --erase        erases a collection (flac, ogg, mp3 only !)"
-       print "         --version      gives the program version"
-       print "         --help         gives help page\n"
-       print "EXAMPLES:"       
-       print "         telemeta --create my_collection"
-       print "         telemeta --backup my_collection file.wav"
-       print "         telemeta --backup my_collection --album /path/to/directory/"
-       print "         telemeta --backup my_collection --album --par2 --rsync /path/to/directory/"
-       print "         telemeta --backup my_collection --album --par2 --rsync --force /path/to/directory/\n"
-       print "AUTHOR:"
-       print "         Guillaume Pellerin <yomguy@altern.org>\n"
-       print "URL:"
-       print "         http://svn.parisson.org/telemeta\n"
-       print 'IMPORTANT:'
-       print "         With the '--album' option, it supposed that all your wav files in the directory are named respectively to this scheme :"
-       print "            artist-title[-album-date-genre-description][.wav]"
-       print "         where the 'artist' and 'title' tags are necessary needed."
-       print "         Tags between [] are optional main tags.\n"
-       print "FOR MORE INFORMATIONS :"
-       print "         - read the README file"
-       print "         - go to http://svn.parisson.org/telemeta"
-       sys.exit('         - email me !\n')
-
-elif sys.argv[1] == '--version':
-       sys.exit('Version: '+str(version))
-
-else :
-       print "telemeta v"+str(version)+" (c) 2006-2007 Guillaume Pellerin <yomguy@altern.org>"
-       print """   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.\n"""
-
-
-# Initialisation
-# ===============
-
-argv = sys.argv
-len_argv = len(argv)
-
-# Get collection consts
-collection = consts.Collection()
-
-# Get arguments
-if '--recover' in argv :
-       index = argv.index('--recover')
-       audio_tools.recover_par_key(argv[index+1]+os.sep)
-       sys.exit('Directory successfully recovered !')
-
-if '--erase' in argv :
-       type_list = tag_tools.get_consts_value('type_list')
-       type_list = type_list.split(',')
-       index = argv.index('--erase')
-       audio_tools.clean_directory(argv[index+1],type_list)
-       sys.exit('Media directories successfully cleaned !')
-
-if '--force' in argv :
-       print 'Warning: forcing file transfert and conversion (no audio test) !\n'
-       mode_force = True
-else :
-       mode_force = False
-
-if '--album' in argv :
-       print 'Warning: album (recusive) mode...\n'
-       mode_album = True
-else :
-       mode_album = False
-
-if '--backup' in argv :
-       print 'Warning: backup mode...\n'
-       mode_backup = True
-else :
-       mode_backup = False
-
-if '--tags' in argv :
-       print 'Warning: making tags...\n'
-       mode_tags = True
-else :
-       mode_tags = False
-
-if '--add-tag' in argv :
-       print 'Warning: adding tags...\n'
-       mode_add_tag = True
-else :
-       mode_add_tag = False
-
-if '--from-xml' in argv :
-       print 'Warning: processing from XML...\n'
-       mode_from_xml = True
-else :
-       mode_from_xml = False
-
-if '--clean-strings' in argv :
-       print 'Warning: Cleaning strings...\n'
-       mode_clean = True
-else :
-       mode_clean = False
-
-if '--all-default' in argv :
-       print 'Warning: default mode enabled...\n'
-       mode_default = True
-else :
-       mode_default = False
-
-if '--par2' in argv :
-       print 'Warning: creates par2 security keys...\n'
-       mode_par2 = True
-else :
-       mode_par2 = False
-
-if '--rsync' in argv :
-       print 'Warning: synchronize with remote host...\n'
-       mode_rsync = True
-else :
-       mode_rsync = False
-
-if '--create' in argv :
-       print 'Warning: creating a telemeta collection...\n'
-       mode_create = True
-else :
-       mode_create = False
-
-# Creates user default dir
-user_dir = tag_tools.get_consts_value('user_dir')
-if not os.path.exists(user_dir):
-       os.mkdir(user_dir)
-
-# Create or check the databse config
-default_collection_xml = tag_tools.get_consts_value('default_collection_xml')
-if not os.access(default_collection_xml, os.F_OK) :
-       tag_tools.write_collection_consts(default_collection_xml)
-
-# Create the collection
-if mode_create :
-       if len(argv) == 3 :
-               index = argv.index('--create')
-               collection_name = argv[index+1]
-               tag_tools.ask_write_collection(collection_name)
-               default_collection_xml = tag_tools.get_consts_value('default_collection_xml')
-               collection_dir = tag_tools.get_consts_value('collection_dir')
-               if not os.path.exists(collection_dir):
-                       os.mkdir(collection_dir)
-               else :
-                               sys.exit('ERROR: the collection '+collection_name+' already exists')
-               tag_tools.write_collection_consts(default_collection_xml)
-               tag_tools.write_collection_consts(collection_dir+os.sep+collection_name+'.xml')
-               # Parses collection data
-               sys.exit("\nCollection created ! You can now --backup media in it...")
-       else :
-               sys.exit("ERROR: no collection name given... : give a name for your collection.")
-# Backup into the collection
-elif mode_backup :
-       # Check syntax
-       if not os.path.exists(sys.argv[len(sys.argv)-1]) :
-               sys.exit("ERROR: no such media... : give a directory or a file as last argument.")
-       index = argv.index('--backup')
-       collection_name = argv[index+1]
-       collection_xml = user_dir+os.sep+collection_name+'.xml'
-       if not os.path.exists(collection_xml) :
-               sys.exit("This collection doesn't exists. Create it first ! (--create)")
-       else :
-               doc = xml.dom.minidom.parse(user_dir+os.sep+collection_name+'.xml')
-               print "Parsing collection XML file..."
-               tag_tools.get_collection_consts(doc)
-               collection_dir = tag_tools.get_consts_value('collection_dir')
-               print "OK\n"
-       
-
-# Creates source dir
-src_dir = collection_dir+os.sep+'src'+os.sep
-if not os.path.exists(src_dir) :
-        os.mkdir(src_dir)
-
-# Creates user default tag/opt file and parse it
-default_tag_xml = tag_tools.get_consts_value('default_tag_xml')
-if not os.access(default_tag_xml, os.F_OK) :
-       tag_tools.write_def_tags(default_tag_xml)
-
-# Parses tag data
-doc = xml.dom.minidom.parse(default_tag_xml)
-tag_tools.get_def_tags(doc)
-
-# Initializes master file list
-file_master_list = range(1)
-
-# File listing for album mode
-if mode_album :
-       master_dir = argv[len_argv-1]+os.sep
-       if os.path.isdir(master_dir):
-               file_master_list = os.listdir(master_dir)
-       else:
-               sys.exit('Please give a directory path for the last argument (album mode)...')
-# File listing in normal mode
-else :
-       master_dir = argv[len_argv-1]
-       if os.path.isdir(master_dir):
-               file_master_list = os.listdir(master_dir)
-       elif os.path.isfile(master_dir):
-               master_dir = os.getcwd()+os.sep
-               file_master_list[0] = str(argv[len_argv-1])
-       else:
-               sys.exit('Please give a directory or a file path for the last argument...')
-
-# Asks tags if mode album
-if mode_album and not mode_from_xml :
-       tag_tools.ask_write_tag()
-       tag_tools.write_def_tags(default_tag_xml)
-
-
-# Main loop
-# =========
-
-for file in file_master_list :
-       if isaudio(master_dir+os.sep+file) or (mode_force and ext_is_audio(master_dir+os.sep+file)):
-               print '\n'
-               print '+------------------------------------------------------------------------------------'
-               print '| Processing '+master_dir+file
-               print '+------------------------------------------------------------------------------------'
-
-               # Init
-               file_name = file
-               file_in = file
-               dir_in = src_dir
-
-               # Backup mode
-               if mode_backup :
-                       album_dir_tmp = tag_tools.get_tag_value('ALBUM')
-                       album_dir = collection_dir+os.sep+'src'+os.sep+album_dir_tmp+os.sep
-                       if not os.path.exists(album_dir) :
-                               os.mkdir(album_dir)
-                       if isaudio(master_dir+file) and ( not audio_tools.compare_md5_key(master_dir+file,album_dir+file) or mode_force ) :
-                               print 'Copying files into: '+album_dir+''
-                               os.system('cp -ra "'+master_dir+file+'" '+album_dir)
-                               print 'OK\n'
-                       #else:
-                       #       sys.exit(master_dir+file+' is not an audio file...')
-                       src_dir = album_dir
-                       dir_in = src_dir
-               else :
-                       dir_in = master_dir
-
-               # Creating par2 key
-               par_key_value = tag_tools.get_opt_value('par_key')
-               if mode_par2 and par_key_value :
-                       # Creating "par2" security keys
-                       print 'Creating "par2" security keys...'
-                       audio_tools.create_par_key(dir_in,file)
-
-               # Name, extension
-               file_name_woext, file_ext = tag_tools.filename_split(file)
-               tag_tools.add_tag('ORIGINAL_FILENAME',file)
-               tag_tools.add_tag('ORIGINAL_TYPE',file_ext)
-
-               # Get original XML
-               if mode_from_xml :
-                       doc = xml.dom.minidom.parse(dir_in+file_name+'.xml')
-                       tag_tools.get_def_tags(doc)
-
-               # Album mode
-               if mode_album :
-                       # Getting file main tags
-                       title,artist,file_name_new = tag_tools.name2tag(dir_in,file_name_woext,file_ext)
-                       tag_tools.add_tag('ARTIST',artist)
-                       tag_tools.add_tag('TITLE',title)
-                       print "Artist: "+artist
-                       print "Title: "+title+'\n'
-                       #tag_tools.write_def_tags(default_tag_xml)
-
-               # Asks for new metadata and write default user tags/options
-               if not mode_default and not mode_from_xml and not mode_album:
-                       tag_tools.ask_write_tag()
-               tag_tools.write_def_tags(default_tag_xml)
-
-
-
-               # Clean mode
-               if mode_clean :
-                       file_name = tag_tools.clean_filename(file_name)
-                       # Renaming backup source file
-                       tag_tools.rename_file(dir_in,dir_out,file,file_name)
-
-               # Writing xml data
-               if not mode_from_xml :
-                       print 'Writing xml data...'
-                       tag_tools.write_def_tags(dir_in+file_name+'.xml')
-
-               # Getting encoding types
-               enc_types = tag_tools.get_opt_value('enc_types')
-               enc_types = string.replace(enc_types,' ','').split(',')
-
-               # Checking existing file
-               for enc_type in enc_types:
-                       dir_out = master_dir+enc_type+os.sep
-                       file_out = file_name_woext+'.'+enc_type
-                       if not os.path.exists(dir_out+file_out):
-                               new_track = True
-                       else :
-                               new_track = False
-
-               # Decoding to a new 16 bits wav file if needed
-               if not iswav16(dir_in+file_in) and new_track:
-                       print "Decoding to wav 16 bits..."
-                       audio_tools.decode(dir_in+file_in,file_ext)
-                       # Important !
-                       type_list = tag_tools.get_consts_value('type_list')
-                       type_list = type_list.split(',')
-                       if not file_ext in type_list :
-                               file_in=file_in+'.wav'
-
-               # Normalize file if needed
-               normalize_value = tag_tools.get_opt_value('normalize')
-               if normalize_value:
-                       print 'Normalizing...'
-                       audio_tools.normalize(dir_in+file_in)
-
-               # Marking
-               audio_marking_value = tag_tools.get_opt_value('audio_marking')
-               auto_audio_marking = tag_tools.get_opt_value('auto_audio_marking')
-               audio_marking_file = tag_tools.get_opt_value('audio_marking_file')
-               audio_marking_timeline = tag_tools.get_opt_value('audio_marking_timeline')
-               audio_marking_timeline = string.replace(audio_marking_timeline,' ','').split(',')
-               if audio_marking_value and new_track:
-                       if auto_audio_marking:
-                               print 'Creating track audio mark...'
-                               audio_marking.make_auto_mark(dir_in,file_in)
-                               audio_marking_file = dir_in+file_in+'_mark.wav'
-                       print 'Marking '+file_in+' with '+audio_marking_file+'...'
-                       audio_marking.mark_audio(dir_in,file_in,audio_marking_file,audio_marking_timeline)
-                       file_in = 'marked_'+file_in
-
-               # Encoding loop
-               for enc_type in enc_types:
-                       dir_out = collection_dir+os.sep+enc_type+os.sep
-                       if not os.path.exists(dir_out):
-                               os.mkdir(dir_out)
-                       album = tag_tools.get_tag_value('ALBUM')
-                       dir_out = collection_dir+os.sep+enc_type+os.sep+album+os.sep
-                       if not os.path.exists(dir_out):
-                               os.mkdir(dir_out)
-                       file_out = file_name_woext+'.'+enc_type
-
-                       if not os.path.exists(dir_out+file_out) or mode_force :
-                               print 'Converting '+dir_in+file_name+' to '+enc_type+'...'
-                               # Encoding
-                               print 'Encoding file...'
-                               audio_tools.encode(enc_type,dir_in,file_in,dir_out,file_out)
-                               print 'Writing tags to encoded file...'
-                               tag_tools.write_tags(enc_type,dir_out,file_out)
-
-                       else :
-                               print dir_out+file_out+' already exists !'
-                               if mode_tags :
-                                       print 'But writing tags to encoded file...'
-                                       tag_tools.write_tags(enc_type,dir_out,file_out)
-
-               # Remove tmp files
-               file_list = os.listdir(src_dir)
-               for file in file_list:
-                       if 'marked_' in file or '.ewf' in file or '_mark.wav' in file or file_ext+'.wav' in file:
-                               os.system('rm "'+dir_in+file+'"')
-
-       else :
-               print file+" is not an audio file !"
-
-# Sync to the remote server
-if mode_rsync :
-       net_backup_host = tag_tools.get_consts_value('net_backup_host')
-       net_backup_dir = tag_tools.get_consts_value('net_backup_dir')
-       print '+------------------------------------------------------------------------------------'
-       print '| Synchronizing with '+net_backup_host
-       print '+------------------------------------------------------------------------------------'
-       os.system('rsync -avzLp --delete --rsh="ssh -l '+os.environ["USER"]+'" '+collection_dir+' '+os.environ["USER"]+'@'+net_backup_host+':'+net_backup_dir)
-       print "Collection Synchronized !"
-
-
-# End
-# ===
diff --git a/typeToolBox.py b/typeToolBox.py
deleted file mode 100755 (executable)
index a6f2cb2..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-#
-# Author: Ingelrest François (Athropos@gmail.com)
-#
-# 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 Library 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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
-
-# Supported types
-# 'bool' type must be placed *before* 'int' type, otherwise booleans are detected as integers
-types = {bool : 'bool', int : 'int', str : 'str'}
-
-# Return a String with the type of value
-def getType(value) :
-    for type in types.keys() :
-        if isinstance(value, type) :
-            return types[type]
-    raise TypeError, str(value) + ' has an unsupported type'
-
-# Return value, casted into type
-def cast(value, type) :
-    if type == 'bool' :
-        if value == 'True' :
-            return True
-        return False
-    elif type == 'int' :
-        return int(value)
-    elif type == 'str' :
-        return str(value)
-    raise TypeError, type + ' is an unsupported type'