def train3(options, args): partition_algorithm= options.partition_algorithm rythm_patch= options.rythm_patch melody_patch= options.melody_patch level= options.level infname= args[0] if len(args) >= 2: outfname= args[1] else: import electrozart outpath= path.abspath(path.join(electrozart.__path__[0], '../..', options.output_dir, datetime.now().strftime('%Y-%m-%d'))) if not path.isdir(outpath): print "Creating dir", outpath os.makedirs(outpath) outfname= path.basename(infname) if outfname in os.listdir(outpath) and not options.override: # -4 por el .mid +1 por el - versions= [fname[len(outfname)-4+1:-4] for fname in os.listdir(outpath) if fname.startswith(outfname[:-4])] versions= [str for str in versions if len(str) > 0] for i in reversed(xrange(len(versions))): try: versions[i]= int(versions[i]) except: versions.pop(i) if len(versions) == 0: versions= [0] outfname= '%s-%s.mid' % (outfname[:-4], max(versions)+1) outfname= path.join(outpath, outfname) parser= MidiScoreParser() score= parser.parse(infname) #score= quantize(score) composer= NarmourMarkov() composer= YamlComposer() composer= SupportNotesComposer() composed_score= composer.compose(score, **options.__dict__) composer.original_score= score composer.composed_score= composed_score writer= NotesScoreWriter() writer= MidiScoreWriter() writer.dump(composed_score, outfname) print "saving in ", outfname print 'done!' return composer
def train3(options, args): print "using seed", options.seed infname= args[0] if len(args) >= 2: outfname= args[1] else: import electrozart outpath= path.abspath(path.join(electrozart.__path__[0], '../..', options.output_dir, datetime.now().strftime('%Y-%m-%d'))) if not path.isdir(outpath): print "Creating dir", outpath os.makedirs(outpath) if os.path.exists('output'): os.unlink('output') os.system('ln -s %s output' % outpath) outfname= path.basename(infname).lower() if outfname in os.listdir(outpath) and not options.override: # -4 por el .mid +1 por el - versions= [fname[len(outfname)-4+1:-4] for fname in os.listdir(outpath) if fname.startswith(outfname[:-4])] versions= [s for s in versions if len(s) > 0] for i in reversed(xrange(len(versions))): if not versions[i].isdigit(): versions.pop(i) else: versions[i]= int(versions[i]) if len(versions) == 0: versions= [0] outfname= '%s-%s.mid' % (outfname[:-4], max(versions)+1) outfname= path.join(outpath, outfname) # fnames info_folder= outfname.replace('.mid', '-info') params_file= outfname[:-3] + 'log' diff_file= outfname[:-3] + 'diff' svn_file= outfname[:-3] + 'svn' solo_fname= outfname.replace('.mid', '-solo.mid') perc_fname= outfname.replace('.mid', '-perc.mid') wolp_fname= outfname.replace('.mid', '-wolp.mid') outfname= outfname.lower() parser= MidiScoreParser() score= parser.parse(infname) #score= quantize(score) composer= NarmourMarkov() composer= YamlComposer() composer= SupportNotesComposer() if options.only_save_info: composer.build_models(score, **options.__dict__) print "\n\nSAVING INFO\n\n" if os.path.exists(info_folder): import shutil shutil.rmtree(info_folder) os.makedirs(info_folder) composer.save_info(info_folder, score) print_files(params_file, diff_file, svn_file, outfname, solo_fname, wolp_fname, perc_fname, info_folder) return composed_score, instrument= composer.compose(score, **options.__dict__) # XXX composer.original_score= score composer.composed_score= composed_score orig_composed_score= composed_score.copy() writer= NotesScoreWriter() writer= MidiScoreWriter() writer.dump(composed_score, outfname) solo_notes= composed_score.get_notes(instrument=instrument) piano= Instrument(patch=None) composed_score.notes_per_instrument= {piano: solo_notes} writer.dump(composed_score, solo_fname) lp_notes= set(score.get_first_voice()) notes_wolp= [] composed_score.notes_per_instrument= {instrument: solo_notes} for i in score.instruments: if i == instrument: continue composed_score.notes_per_instrument[i]= [n for n in score.get_notes(instrument=i) if n not in lp_notes] writer.dump(composed_score, wolp_fname) import to_percusion perc_notes= to_percusion.get_percusion_track(solo_notes) orig_composed_score.notes_per_instrument[instrument]= perc_notes instrument.is_drums= True writer.dump(orig_composed_score, perc_fname) # draw things if options.save_info: os.makedirs(info_folder) composer.save_info(info_folder, score) params= composer.params params['options']= options.__dict__ params['args']= args print_files(params_file, diff_file, svn_file, outfname, solo_fname, wolp_fname, perc_fname, info_folder) save_state(composer, params_file, diff_file, svn_file) print 'done!' return composer