Example #1
0
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
Example #2
0
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