Exemplo n.º 1
0
def main():
   parser = argparse.ArgumentParser()
   parser.add_argument("-s", "--splitScoreOnly", action="store_true",
                       help="Split recorded files only"
                       )
   parser.add_argument("scoreFilename", nargs="?" , 
                       help="Input score filename",
                       default=settings.defaultScoreFilename
                      )
   parser.add_argument("outputDir", nargs="?" , 
                       help="Expressive output directory",
                       default=settings.defaultOutputDir
                      )
   args = parser.parse_args()

   if settings.DEBUG: print("[DEBUG] Filename: " + args.scoreFilename)
   try:
      score = music21.converter.parse(args.scoreFilename)
   except music21.converter.ConverterException:
      print("[WARN] " + args.scoreFilename+ " is not a score file, skipped.")
      raise

   #recLen = 0;
   #scoreLen = len(score.flat.notes)
   if settings.DEBUG: 
      print("[DEBUG] "), 
      score.flat.show('text')
   #recLogFilename = settings.getRecLogFilename(args.scoreFilename)
   notes = score.flat.notes
   if (not args.splitScoreOnly):
       recordAll(notes, args = args)
   split.split(settings.getSplitRecFilename(args.scoreFilename, args.outputDir),
               args.scoreFilename, args.outputDir)
Exemplo n.º 2
0
def recordAll(score, args, splitRecord = [], counter = 1): #score needs to be flat
   #splitRecord is used to split the original score into pieces
   #because it is possible that the splitRecord is generated by structural 
   #analysis in the future, so we seperate the score splitting code after all 
   #recording are finished
   #record perfs and generate split file
   if len(score) == 0:
      #splitRecFilename= args.outputDir
      #splitRecFilename+= settings.getScoreName(args.scoreFilename)+'.split.json'
      splitRecFilename = settings.getSplitRecFilename(args.scoreFilename, 
                                                      args.outputDir)
      with open(splitRecFilename, 'w') as f:
         simplejson.dump(splitRecord, f, indent = 3)

      print('[INFO] splitting record saved to ' + splitRecFilename)
      return
   else:
      try:
         print("[INFO] Now playing score."),
         print("You can start to record anytime by pressing Ctrl+c")
         record.playStream(score); #provide stop button
      except KeyboardInterrupt:
         pass
      print("[INFO] =====Now recording phrase no." + str(counter) + "=====")
      #recLogFilename = settings.getRecLogFilename(args.scoreFilename +'.'+ str(counter))
      #recLogFilename = args.outputDir + settings.getScoreName(args.scoreFilename)
      #recLogFilename += '.'+ str(counter) + '.log'
      recLogFilename = settings.getRecLogFilename(counter, 
                                                  args.scoreFilename, 
                                                  args.outputDir)
      settings.printDebug(recLogFilename)
      record.record(score, recLogFilename)
      perf = musicGenerator.generatePerf(score, recLogFilename)
      #outFilename= args.outputDir + settings.getScoreName(args.scoreFilename)
      #outFilename+= '.'+ str(counter) + '.perf' + settings.defaultOutputFormat
      outFilename = settings.getOutFilename(counter, 
                                            args.scoreFilename,
                                            args.outputDir)
      musicGenerator.savePerf2File(perf, outFilename)
      scoreHead= score[:len(perf)]
      #if settings.DEBUG:
      #   settings.printDebug('')
      #   scoreHead.show('text')

      scoreTail= score[len(perf):]
      #if settings.DEBUG:
         #settings.printDebug('')
         #scoreTail.show('text')
      scoreHeadOffsets = [n.offset for n in scoreHead]
      splitRecord.append(scoreHeadOffsets)
      settings.printDebug(splitRecord)
      #splitRecord.extend(scoreHead)
      #capture mouse
      #pos = pygame.mouse.get_pos()
      #print("mouse position: "+pos)
      recordAll(scoreTail, args, splitRecord, counter+1)