def pitch2midiPyinMonoNoteOut(self, monoNoteOut_filename, monoNoteOutMidi_filename): """ read note pitch and convert to midi note :param monoNoteOut_filename: :return: noteStartingTime, noteDurationTime """ monoNoteOut = np.loadtxt(monoNoteOut_filename, delimiter=",", usecols=[1, 2, 3]) noteStartingTime = monoNoteOut[:, 0] noteDurTime = monoNoteOut[:, 1] notePitch = monoNoteOut[:, 2] notePitchMidi = pitch2midi(notePitch) with open(monoNoteOutMidi_filename, "w+") as outfile: outfile.write("startTime" + "," + "pitch" + "," + "freq" + "," + "duration" + "," + "noteStr" + "\n") for ii in range(len(noteStartingTime)): noteCents = hz2cents(float(notePitch[ii])) noteStr = cents2pitch(noteCents) outfile.write( str(noteStartingTime[ii]) + "," + str(notePitchMidi[ii]) + "," + str(notePitch[ii]) + "," + str(noteDurTime[ii]) + "," + noteStr + "\n" ) return noteStartingTime, noteDurTime, notePitch, notePitchMidi
def pitch2midiPyinMonoNoteOut(self, monoNoteOut_filename,monoNoteOutMidi_filename): ''' read note pitch and convert to midi note :param monoNoteOut_filename: :return: noteStartingTime, noteDurationTime ''' monoNoteOut = np.loadtxt(monoNoteOut_filename,delimiter=',',usecols=[1,2,3]) noteStartingTime = monoNoteOut[:,0] noteDurTime = monoNoteOut[:,1] notePitch = monoNoteOut[:,2] notePitchMidi = pitch2midi(notePitch) with open(monoNoteOutMidi_filename, 'w+') as outfile: outfile.write('startTime'+',' +'pitch'+',' +'freq'+',' +'duration'+',' +'noteStr'+'\n') for ii in range(len(noteStartingTime)): noteCents = hz2cents(float(notePitch[ii])) noteStr = cents2pitch(noteCents) outfile.write(str(noteStartingTime[ii])+',' +str(notePitchMidi[ii])+',' +str(notePitch[ii])+',' +str(noteDurTime[ii])+',' +noteStr+'\n') return noteStartingTime, noteDurTime, notePitch, notePitchMidi
def noteEndFrameHelper(self, notePitchtrack, startDur): notePitchtrack = np.abs(notePitchtrack) notePitchtrack = pitch2midi(notePitchtrack) # convert to midi note self.pitchtrackByNotes.append([notePitchtrack,startDur]) notePitchtrack = [] startDur = [0, 0] return notePitchtrack, startDur
def doSegmentationForPyinVamp(self, pitchtrack_filename, monoNoteOut_filename): # doSegmentationFunction for pYin vamp plugin exported # pitchtrack and monoNote self.reset() frameStartingTime, pitchtrack = self.readPyinPitchtrack( pitchtrack_filename) noteStartingTime, noteDurTime = self.readPyinMonoNoteOut( monoNoteOut_filename) # convert pitch to midi and save pitch track monoNoteOutMidi_filename = monoNoteOut_filename[:-4] + '_midi.csv' self.pitch2midiPyinMonoNoteOut(monoNoteOut_filename, monoNoteOutMidi_filename) self.minMaxPitchtrack(pitchtrack) pitchtrack = np.abs(pitchtrack) pitchtrack = pitch2midi(pitchtrack) noteEndingTime = noteStartingTime + noteDurTime noteStartingIndex = [] noteEndingIndex = [] for ii in noteStartingTime: noteStartingIndex.append(np.argmin(np.abs(frameStartingTime - ii))) for ii in noteEndingTime: noteEndingIndex.append(np.argmin(np.abs(frameStartingTime - ii))) for ii in range(len(noteStartingIndex)): notePitchtrack = pitchtrack[noteStartingIndex[ii]:( noteEndingIndex[ii] + 1)] startDur = [ noteStartingIndex[ii], noteEndingIndex[ii] - noteStartingIndex[ii] + 1 ] noteStartingFrame = int(noteStartingTime[ii] * (self.fs / self.hopSize)) noteEndingFrame = int(noteEndingTime[ii] * (self.fs / self.hopSize)) self.noteStartEndFrame.append([noteStartingFrame, noteEndingFrame]) self.pitchtrackByNotes.append([notePitchtrack.tolist(), startDur]) return
def doSegmentationForPyinVamp(self, pitchtrack_filename, monoNoteOut_filename): # doSegmentationFunction for pYin vamp plugin exported # pitchtrack and monoNote self.reset() frameStartingTime, pitchtrack = self.readPyinPitchtrack(pitchtrack_filename) noteStartingTime, noteDurTime = self.readPyinMonoNoteOut(monoNoteOut_filename) # convert pitch to midi and save pitch track monoNoteOutMidi_filename = monoNoteOut_filename[:-4]+'_midi.csv' self.pitch2midiPyinMonoNoteOut(monoNoteOut_filename,monoNoteOutMidi_filename) self.minMaxPitchtrack(pitchtrack) pitchtrack = np.abs(pitchtrack) pitchtrack = pitch2midi(pitchtrack) noteEndingTime = noteStartingTime+noteDurTime noteStartingIndex = [] noteEndingIndex = [] for ii in noteStartingTime: noteStartingIndex.append(np.argmin(np.abs(frameStartingTime - ii))) for ii in noteEndingTime: noteEndingIndex.append(np.argmin(np.abs(frameStartingTime - ii))) for ii in range(len(noteStartingIndex)): notePitchtrack = pitchtrack[noteStartingIndex[ii]:(noteEndingIndex[ii]+1)] startDur = [noteStartingIndex[ii],noteEndingIndex[ii]-noteStartingIndex[ii]+1] noteStartingFrame = int(noteStartingTime[ii]*(self.fs/self.hopSize)) noteEndingFrame = int(noteEndingTime[ii]*(self.fs/self.hopSize)) self.noteStartEndFrame.append([noteStartingFrame,noteEndingFrame]) self.pitchtrackByNotes.append([notePitchtrack.tolist(), startDur]) return