From: yomguy Date: Mon, 19 Jul 2010 09:27:04 +0000 (+0000) Subject: rn X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=e37814e67b1a8ee6deb2d05a0f5e67b545e6850f;p=tools.git rn git-svn-id: http://svn.parisson.org/svn/tools/trunk@78 457c0346-1240-4656-8a5a-9edca8063506 --- diff --git a/isp_tools/isp_trans.py b/isp_tools/isp_trans.py new file mode 100644 index 0000000..523675f --- /dev/null +++ b/isp_tools/isp_trans.py @@ -0,0 +1,202 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Copyright (c) 2009-2010 Guillaume Pellerin + +# This file is part of YomGuy Tools. + +# TimeSide 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. + +# TimeSide 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 TimeSide. If not, see . + +# Author: Guillaume Pellerin + +version = '0.1' + +import os +import re +import sys +import xlrd +import logging + + +class Logger: + + def __init__(self, file): + self.logger = logging.getLogger('myapp') + self.hdlr = logging.FileHandler(file) + self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + self.hdlr.setFormatter(self.formatter) + self.logger.addHandler(self.hdlr) + self.logger.setLevel(logging.INFO) + + def write_info(self, prefix, message): + self.logger.info(' ' + prefix + ' : ' + message.decode('utf8')) + + def write_error(self, prefix, message): + self.logger.error(prefix + ' : ' + message.decode('utf8')) + + + +class ISPCollection: + + def __init__(self, dir): + self.dir = dir + self.dir_name = self.dir.split(os.sep)[-1] + self.file_list = os.listdir(self.dir) + + def xls_list(self): + file_list = [] + for file in self.file_list: + ext = os.path.splitext(file)[1] + if ext == '.xls' or ext == '.XLS': + file_list.append(file) + return file_list + + def wav_list(self): + list = [] + for file in self.file_list: + ext = os.path.splitext(file)[1] + if ext == '.wav' or ext == '.WAV': + list.append(file) + return list + + +class ISPXLS: + + def __init__(self, file): + self.first_row = 8 + self.original_col = 0 + self.new_col = 1 + self.book = xlrd.open_workbook(file) + self.sheet = self.book.sheet_by_index(0) + self.original_refs = self.original_refs() + self.new_refs = self.new_refs() + #print len(self.new_refs) + while True: + if len(self.original_refs) == 0 or len(self.new_refs) == 0: + break + else: + if not 'CNRS' in self.new_refs[0].encode('utf8') \ + and not self.original_refs[0].encode('utf8') == '': + self.original_refs = self.original_refs[1:] + self.new_refs = self.new_refs[1:] + else: + break + + self.size = max(len(self.new_refs), len(self.original_refs)) + + def original_refs(self): + col = self.sheet.col(self.original_col) + list = [] + for cell in col[self.first_row:]: + if cell.ctype == 1: + list.append(cell.value) + return list + + def new_refs(self): + col = self.sheet.col(self.new_col) + list = [] + for cell in col[self.first_row:]: + if cell.ctype == 1: + list.append(cell.value) + return list + + +class ISPItemFile: + + def __init__(self): + self.media = '' + + def set_media(self, media): + self.media = media + + def is_wav(self): + try: + audio_file = audiolab.Sndfile(self.media, 'r') + if audio_file.nframes and audio_file.nframes != 0: + return True + except IOError: + return False + + def properties(self): + self.frames = self.audio_file.get_nframes() + self.samplerate = self.audio_file.get_samplerate() + self.channels = self.audio_file.get_channels() + self.format = self.audio_file.get_file_format() + self.encoding = self.audio_file.get_encoding() + + +class ISPTrans(object): + + def __init__(self, media_dir, img_dir): + self.root_dir = media_dir + self.img_dir = img_dir + self.scheme = GrapherScheme() + self.width = self.scheme.width + self.height = self.scheme.height + self.bg_color = self.scheme.bg_color + self.color_scheme = self.scheme.color_scheme + self.force = self.scheme.force + + self.media_list = self.get_media_list() + if not os.path.exists(self.img_dir): + os.mkdir(self.img_dir) + self.path_dict = self.get_path_dict() + + def get_media_list(self): + media_list = [] + for root, dirs, files in os.walk(self.root_dir): + if root: + for file in files: + ext = file.split('.')[-1] + if ext == 'mp3' or ext == 'MP3': + media_list.append(root+os.sep+file) + return media_list + + def get_path_dict(self): + path_dict = {} + for media in self.media_list: + name = os.path.splitext(media) + name = name[0].split(os.sep)[-1] + path_dict[media] = self.img_dir + os.sep + name + '.png' + return path_dict + + def process(self): + for source, image in self.path_dict.iteritems(): + if not os.path.exists(image) or self.force: + print 'Rendering ', source, ' to ', image, '...' + audio = os.path.join(os.path.dirname(__file__), source) + decoder = timeside.decoder.FileDecoder(audio) + waveform = timeside.grapher.Waveform(width=self.width, height=self.height, output=image, + bg_color=self.bg_color, color_scheme=self.color_scheme) + (decoder | waveform).run() + print 'frames per pixel = ', waveform.graph.samples_per_pixel + waveform.render() + + +if __name__ == '__main__': + if len(sys.argv) <= 2: + print """ + Usage : python isp_trans.py /path/to/media_dir /path/to/transcoded_media_dir + + Dependencies : python, python-xlrd, ffmpeg + + """ + else: + media_dir = sys.argv[-2] + trans_dir = sys.argv[-1] + i = ISPTrans(media_dir, trans_dir) + i.process() + + + diff --git a/isp_trans/isp_trans.py b/isp_trans/isp_trans.py deleted file mode 100644 index 523675f..0000000 --- a/isp_trans/isp_trans.py +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Copyright (c) 2009-2010 Guillaume Pellerin - -# This file is part of YomGuy Tools. - -# TimeSide 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. - -# TimeSide 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 TimeSide. If not, see . - -# Author: Guillaume Pellerin - -version = '0.1' - -import os -import re -import sys -import xlrd -import logging - - -class Logger: - - def __init__(self, file): - self.logger = logging.getLogger('myapp') - self.hdlr = logging.FileHandler(file) - self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') - self.hdlr.setFormatter(self.formatter) - self.logger.addHandler(self.hdlr) - self.logger.setLevel(logging.INFO) - - def write_info(self, prefix, message): - self.logger.info(' ' + prefix + ' : ' + message.decode('utf8')) - - def write_error(self, prefix, message): - self.logger.error(prefix + ' : ' + message.decode('utf8')) - - - -class ISPCollection: - - def __init__(self, dir): - self.dir = dir - self.dir_name = self.dir.split(os.sep)[-1] - self.file_list = os.listdir(self.dir) - - def xls_list(self): - file_list = [] - for file in self.file_list: - ext = os.path.splitext(file)[1] - if ext == '.xls' or ext == '.XLS': - file_list.append(file) - return file_list - - def wav_list(self): - list = [] - for file in self.file_list: - ext = os.path.splitext(file)[1] - if ext == '.wav' or ext == '.WAV': - list.append(file) - return list - - -class ISPXLS: - - def __init__(self, file): - self.first_row = 8 - self.original_col = 0 - self.new_col = 1 - self.book = xlrd.open_workbook(file) - self.sheet = self.book.sheet_by_index(0) - self.original_refs = self.original_refs() - self.new_refs = self.new_refs() - #print len(self.new_refs) - while True: - if len(self.original_refs) == 0 or len(self.new_refs) == 0: - break - else: - if not 'CNRS' in self.new_refs[0].encode('utf8') \ - and not self.original_refs[0].encode('utf8') == '': - self.original_refs = self.original_refs[1:] - self.new_refs = self.new_refs[1:] - else: - break - - self.size = max(len(self.new_refs), len(self.original_refs)) - - def original_refs(self): - col = self.sheet.col(self.original_col) - list = [] - for cell in col[self.first_row:]: - if cell.ctype == 1: - list.append(cell.value) - return list - - def new_refs(self): - col = self.sheet.col(self.new_col) - list = [] - for cell in col[self.first_row:]: - if cell.ctype == 1: - list.append(cell.value) - return list - - -class ISPItemFile: - - def __init__(self): - self.media = '' - - def set_media(self, media): - self.media = media - - def is_wav(self): - try: - audio_file = audiolab.Sndfile(self.media, 'r') - if audio_file.nframes and audio_file.nframes != 0: - return True - except IOError: - return False - - def properties(self): - self.frames = self.audio_file.get_nframes() - self.samplerate = self.audio_file.get_samplerate() - self.channels = self.audio_file.get_channels() - self.format = self.audio_file.get_file_format() - self.encoding = self.audio_file.get_encoding() - - -class ISPTrans(object): - - def __init__(self, media_dir, img_dir): - self.root_dir = media_dir - self.img_dir = img_dir - self.scheme = GrapherScheme() - self.width = self.scheme.width - self.height = self.scheme.height - self.bg_color = self.scheme.bg_color - self.color_scheme = self.scheme.color_scheme - self.force = self.scheme.force - - self.media_list = self.get_media_list() - if not os.path.exists(self.img_dir): - os.mkdir(self.img_dir) - self.path_dict = self.get_path_dict() - - def get_media_list(self): - media_list = [] - for root, dirs, files in os.walk(self.root_dir): - if root: - for file in files: - ext = file.split('.')[-1] - if ext == 'mp3' or ext == 'MP3': - media_list.append(root+os.sep+file) - return media_list - - def get_path_dict(self): - path_dict = {} - for media in self.media_list: - name = os.path.splitext(media) - name = name[0].split(os.sep)[-1] - path_dict[media] = self.img_dir + os.sep + name + '.png' - return path_dict - - def process(self): - for source, image in self.path_dict.iteritems(): - if not os.path.exists(image) or self.force: - print 'Rendering ', source, ' to ', image, '...' - audio = os.path.join(os.path.dirname(__file__), source) - decoder = timeside.decoder.FileDecoder(audio) - waveform = timeside.grapher.Waveform(width=self.width, height=self.height, output=image, - bg_color=self.bg_color, color_scheme=self.color_scheme) - (decoder | waveform).run() - print 'frames per pixel = ', waveform.graph.samples_per_pixel - waveform.render() - - -if __name__ == '__main__': - if len(sys.argv) <= 2: - print """ - Usage : python isp_trans.py /path/to/media_dir /path/to/transcoded_media_dir - - Dependencies : python, python-xlrd, ffmpeg - - """ - else: - media_dir = sys.argv[-2] - trans_dir = sys.argv[-1] - i = ISPTrans(media_dir, trans_dir) - i.process() - - -